如何在 Python 中获取当前时间

获取当前时间的模块 / 方法是什么?

答案

采用:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

而只是时间:

>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.now().time())
15:08:24.789150

请参阅文档以获取更多信息。

要保存类型,可以从datetime模块导入datetime对象:

>>> from datetime import datetime

然后删除前导datetime.以上所有。

您可以使用time.strftime()

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

对于此示例,输出将如下所示: '2013-09-18 11:16:32'

这是strftime指令的列表。

Harley 的答案类似,但是将str()函数用于快速 n 脏的,更易理解的格式:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'

如何使用 Python 获取当前时间?

time模块

time模块提供了一些功能,可以告诉我们时间 “自纪元以来的秒数” 以及其他实用程序。

import time

Unix 时代时间

这是保存数据库时应使用的时间戳格式。它是一个简单的浮点数,可以转换为整数。这对于以秒为单位的算术也很有用,因为它代表自 1970 年 1 月 1 日 00:00:00 以来的秒数,并且相对于我们接下来要看的其他时间表示,它是记忆光。

>>> time.time()
1424233311.771502

该时间戳记不占 leap 秒,因此不是线性的 - leap 秒将被忽略。因此,虽然它不等同于国际 UTC 标准,但它很接近,因此对于大多数记录保存情况而言,都相当不错。

但是,这对于人工调度而言并不理想。如果您希望在某个特定时间发生将来的事件,则需要使用可以解析为 datetime 对象或序列化 datetime 对象的字符串存储该时间(稍后将对此进行描述)。

time.ctime

您还可以用操作系统首选的方式来表示当前时间(这意味着当您更改系统首选项时,它可以更改,因此请不要像其他人所期望的那样,将其作为所有系统的标准时间) 。这通常是用户友好的,但通常不会导致字符串可以按时间顺序排序:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

您也可以使用ctime将时间戳混合为易于阅读的形式:

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

这种转换也不利于保存记录(除非只能由人解析的文本,并且随着光学字符识别和人工智能的改进,我认为这些案件的数量将会减少)。

datetime模块

datetime模块在这里也非常有用:

>>> import datetime

datetime.datetime.now

datetime.now是一个返回当前时间的类方法。它使用time.localtime而不包含时区信息(如果未提供,否则请参阅下面的了解时区)。它具有在外壳上回显的表示形式(允许您重新创建等效的对象),但是在打印(或强制转换为str )时,它具有人类可读(和几乎 ISO)的格式,而词典编排相当于按时间顺序排序:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

日期时间的utcnow

通过执行以下操作,可以获取全球标准 UTC 时间中的 datetime 对象:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC 是几乎等同于 GMT 时区的时间标准。 (虽然 GMT 和 UTC 的夏令时不变,但他们的用户可能会在夏季切换到其他时区,例如英国夏令时。)

datetime 时区感知

但是,到目前为止,我们创建的 datetime 对象都无法轻松转换为各种时区。我们可以使用pytz模块解决该问题:

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

等效地,在 Python 3 中,我们附加了带有 utc timezone实例的timezone类,这也使对象知道时区(但在没有方便的pytz模块的情况下转换为另一个时区,留给读者练习):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

而且我们看到我们可以轻松地从原始 utc 对象转换为时区。

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

您还可以使用pytz timezone localize方法或通过替换 tzinfo 属性(使用replace ,这是盲目的完成)来使幼稚的 datetime 对象知道,但是这些方法不是最佳实践:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

pytz模块允许我们使我们的datetime对象知道时区,并将时间转换为pytz模块中可用的数百个时区。

人们可以表面上连载这个对象 UTC 时间和存储一个数据库中,但它需要远远更多的内存和比简单地存储 Unix 纪元的时间,这是我第一次表现出更容易出错。

其他查看时间的方式更容易出错,尤其是在处理可能来自不同时区的数据时。您希望不要将字符串或序列化日期时间对象用于哪个时区。

如果要使用 Python 为用户显示时间,则ctime可以很好地工作,而不是在表中(通常排序不佳),而是在时钟中。但是,我个人建议在 Python 中使用 Unix 时间或支持时区的 UTC datetime对象处理时间时。

from time import time

t = time()
  • t浮点数,适用于时间间隔测量。

Unix 和 Windows 平台有所不同。

>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

以指定格式输出当前 GMT。还有一个localtime()方法。

页面有更多详细信息。

前面的答案都是好的建议,但我发现使用ctime()最简单:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

这样可以很好地格式化当前本地时间的字符串表示形式。

最快的方法是:

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'

如果您需要当前时间作为time对象:

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)