📜  如何在Python中获取当前日期和时间

📅  最后修改于: 2020-08-27 07:59:17             🧑  作者: Mango

介绍

日志记录,将记录保存到数据库以及访问文件都是程序员从事的常见任务。在每种情况下,日期和时间在维护数据的含义和完整性方面都起着重要作用。程序员通常需要注意日期和时间。

在本文中,我们将学习如何使用Python的内置datetime模块获取当前日期和时间。使用该模块,我们可以将所有相关数据收集到一个对象中,或者分别提取日期和时间。

我们还将学习如何针对不同时区调整日期和时间。最后,我们将研究将datetime对象转换为流行的Unix或Epoch时间戳。

使用datetime获取当前日期和时间

datetime模块包含各种类,以获取有关日期和时间的信息:

  • datetime.date:存储日,月,年或日期
  • datetime.time:以小时,分钟,秒和微秒为单位存储时间。此信息不受任何日期影响
  • datetime.datetime:同时存储datetime属性

让我们获取对象的当前日期和时间datetime.datetime,因为从对象中提取对象datetime对象更加容易。首先,让我们导入datetime模块: 

from datetime import datetime

虽然乍一看很奇怪,但我们是datetimedatetime模块中获取类,这是两件分开的事情。

我们可以使用该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类代表一个日历日期。可以使用与在对象上访问它们相同的方式来访问其yearmonthday属性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库获取时区数据。

如果您的计算机尚不可用,请安装pytzpip: 

$ 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您所在时区的对象。如果您希望将时区本地化,则可以将时区作为第二个参数。

例如,要将时间戳转换为datetimeUTC中的对象,可以执行以下操作:

>>> 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()方法获取时间戳。