📅  最后修改于: 2020-08-27 07:59:17             🧑  作者: Mango
日志记录,将记录保存到数据库以及访问文件都是程序员从事的常见任务。在每种情况下,日期和时间在维护数据的含义和完整性方面都起着重要作用。程序员通常需要注意日期和时间。
在本文中,我们将学习如何使用Python的内置datetime模块获取当前日期和时间。使用该模块,我们可以将所有相关数据收集到一个对象中,或者分别提取日期和时间。
我们还将学习如何针对不同时区调整日期和时间。最后,我们将研究将datetime
对象转换为流行的Unix或Epoch时间戳。
该datetime
模块包含各种类,以获取有关日期和时间的信息:
datetime.date
:存储日,月,年或日期datetime.time
:以小时,分钟,秒和微秒为单位存储时间。此信息不受任何日期影响datetime.datetime
:同时存储date
和time
属性让我们获取对象的当前日期和时间datetime.datetime
,因为从对象中提取对象date
和time
对象更加容易。首先,让我们导入datetime
模块:
from datetime import datetime
虽然乍一看很奇怪,但我们是datetime
从datetime
模块中获取类,这是两件分开的事情。
我们可以使用该now()
函数来获取具有当前日期和时间的对象:
current_datetime = datetime.now()
print(current_datetime)
运行该文件将为我们提供以下输出:
2019-12-13 12:18:18.290623
该now()
函数为我们提供了一个对象,其中包含创建对象时的所有日期和时间。当我们打印它时,Python会自动将对象格式化为字符串,以便人类可以轻松阅读。您可以阅读有关如何使用Python格式化日期的指南,以了解各种打印时间的方法。
您可以像这样获得日期和时间的各个属性:
print(current_datetime.year) # 2019
print(current_datetime.month) # 12
print(current_datetime.day) # 13
print(current_datetime.hour) # 12
print(current_datetime.minute) # 18
print(current_datetime.second) # 18
print(current_datetime.microsecond) # 290623
该now()
方法非常适合捕捉瞬间。但是,当您只关心日期或时间而不是两者时,这是多余的。我们如何仅获取日期信息?
有两种方法可以在Python中获取当前日期。在Python控制台中,我们可以datetime
使用date()
方法从对象获取日期:
>>> from datetime import datetime
>>> current_date = datetime.now().date()
>>> print(current_date)
2019-12-13
但是,初始化一个datetime
对象以捕获日期似乎很浪费。一种替代today()
方法是使用date
该类的方法:
>>> from datetime import date
>>> current_date = date.today()
>>> print(current_date)
2019-12-13
本datetime.date
类代表一个日历日期。可以使用与在对象上访问它们相同的方式来访问其year
,month
和day
属性datetime
。
例如,此print
语句获取每个属性,并且还使用weekday()
方法获取星期几:
>>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" %
... (current_date.weekday()+1, current_date.day, current_date.month, current_date.year))
It's the 5th day of the week, 13th day of the 12th month of the 2019th year
注意:该weekday()
方法返回0到6之间的整数,表示星期几。0对应于星期一。因此,在该示例中,我们添加了1以打印一周中的第5天(星期五),尽管该weekday()
方法返回了4。
现在我们可以自己获取当前日期,让我们看看如何获取当前时间
我们datetime
使用以下time()
方法从对象捕获当前时间:
>>> from datetime import datetime
>>> current_time = datetime.now().time()
>>> print(current_time)
12:18:18.290623
与检索日期不同,没有捷径可以直接捕获当前时间。本datetime.time
类代表一个时间概念,如以小时,分钟,秒和毫秒-什么是不到一天的时间
像datetime
对象一样,我们可以直接访问其属性。这是一个current_time
在句子中打印的示例:
>>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" %
... (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond))
It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds
默认情况下,该now()
函数返回您当地时区的时间。如果我们需要将其转换为根据用户喜好设置的其他内容,该怎么办?让我们看看如何提供时区信息以获取本地化time
对象。
该now()
方法接受时区作为参数,以便datetime
可以适当调整要生成的对象。首先,我们需要通过pytz库获取时区数据。
如果您的计算机尚不可用,请安装pytz
库pip
:
$ pip3 install pytz
现在,pytz
如果我们在柏林,我们来获取当前日期和时间:
>>> import pytz
>>> from datetime import datetime
>>> tz = pytz.timezone('Europe/Berlin')
>>> berlin_current_datetime = datetime.now(tz)
>>> print(berlin_current_datetime)
2019-12-14 00:20:50.840350+01:00
该berlin_current_datetime
会是一个datetime
与所有我们之前看到的属性和功能的对象,但现在它完全符合它是什么的人谁住在这里。
如果您想使用UTC时间,则可以pytz
像以前一样使用模块:
>>> import pytz
>>> from datetime import datetime
>>> utc_current_datetime = datetime.now(pytz.timezone("UTC"))
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
另外,在UTC时间,您根本不需要使用该pytz
模块。该datetime
模块具有一个timezone
属性,可以像这样使用:
>>> from datetime import datetime, timezone
>>> utc_current_datetime = datetime.now(timezone.utc)
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
现在我们可以转换日期和时间以匹配不同的时区,让我们看看如何将其转换为计算中使用最广泛的格式之一-Unix时间戳。
计算机系统根据自Unix时代(即1970年1月1日UTC 00:00:00 UTC)以来经过的秒数来测量时间。对于应用程序,数据库和协议,使用时间戳来显示时间是很常见的。
您可以使用以下time
库在Python中获取当前时间戳:
>>> import time
>>> print(time.time())
1576280665.0915806
该time.time()
函数返回带有Unix时间戳的浮点数。您可以datetime
使用fromtimestamp()
函数将时间戳转换为对象:
>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25
默认情况下,fromtimestamp()
返回datetime
您所在时区的对象。如果您希望将时区本地化,则可以将时区作为第二个参数。
例如,要将时间戳转换为datetime
UTC中的对象,可以执行以下操作:
>>> from datetime import datetime, timezone
>>> print(datetime.fromtimestamp(1576280665, timezone.utc))
2019-12-13 19:44:25+00:00
相反,您可以使用timestamp()
方法将datetime
对象转换为有效的时间戳记:
>>> from datetime import datetime, timezone
>>> print(datetime.now(timezone.utc).timestamp())
1577117555.940705
Pythons内置datetime
库允许我们使用该now()
函数获取当前日期和时间。我们可以使用返回的datetime
对象仅提取日期部分或时间部分。我们还可以使用today()
函数获取当前日期。
默认情况下,Python datetime
在我们的本地时区创建对象。如果利用该pytz
库,我们可以将日期和时间转换为不同的时区。
最后,我们使用该fromtimestamp()
函数获取Unix时间戳来获取datetime
对象。如果有一个datetime
对象,则可以使用其timestamp()
方法获取时间戳。