题 如何在Python中获取当前时间


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


1955
2018-01-06 04:54


起源




答案:


使用:

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

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

而且只是时间:

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

>>> print(datetime.datetime.time(datetime.datetime.now()))
09:17:51.914526

相同,但稍微紧凑:

>>> datetime.datetime.now().time()

看到 文件 了解更多信息。

要保存输入,您可以导入 datetime 来自的对象 datetime 模块:

>>> from datetime import datetime

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


2009
2018-01-06 04:57



datetime.datetime.now()和datetime.datetime.today()是一样的吗? datetime.datetime.now(tz = None)接受时区信息,但datetime.datetime.today()没有 docs.python.org/3.6/library/datetime.html#datetime.datetime.now - Jun
@Jun您的评论似乎是某种答复,但这个答案与此无关 today() 所以你确定这是你评论的正确帖子吗? - Mike - SMT
@ Mike-SMT我只是想发表评论,以便其他人不必环顾四周,因为我不知道开始时的区别 - Jun


您可以使用 time.strftime()

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

787
2018-01-06 04:59



这比@ ParaMeterz的答案更好/更差吗?我们为什么要使用 time模块与 datetime 模块? - frank


如同 哈利的回答,但使用 str() 功能为一个快速,肮脏,稍微更人性化的格式:

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

408
2018-05-04 00:56



所有它的要求是得到当前时间,而不是显示它。 - ppperry
为什么datetime模块的别名很重要?即,为什么不 import datetime 工作? - Mike Palmice
@MikePalmice它有效,但你需要写 datetime.datetime.now()。 - Gabriel


>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')

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

这是列表 的strftime


368
2018-01-09 05:50





如何在Python中获取当前时间?

time 模

time 模块提供的函数告诉我们“自纪元以来的秒数”以及其他实用程序的时间。

import time

Unix大纪元时间

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

>>> time.time()
1424233311.771502

此时间戳不考虑闰秒,因此它不是线性的 - 忽略闰秒。因此虽然它不等同于国际UTC标准,但它很接近,因此对于大多数记录保存案例来说非常好。

然而,这对于人类调度来说并不理想。如果您希望在某个特定时间点发生未来事件,则需要将该时间存储为可以解析为日期时间对象或序列化日期时间对象的字符串(这些将在后面描述)。

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 没有时区信息(如果没有给出,否则请参见下面的时区)。它有一个表示(允许你重新创建一个等效对象)在shell上回显,但是当打印(或强制到一个 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.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不会因夏令时而改变,但他们的用户可能会在暑假期间切换到其他时区,例如英国夏令时。)

日期时间感知

但是,到目前为止我们创建的日期时间对象都不能轻易转换为各种时区。我们可以解决这个问题 pytz 模块:

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

同样,在Python 3中我们有 timezone 有一个utc的课程 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 时区 localize 方法,或通过替换tzinfo属性(使用 replace,这是盲目地完成的,但这些是最后的度假胜地而不是最佳做法:

>>> 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 Epoch时间更容易出错,我首先证明了这一点。

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

如果您正在为用户显示Python的时间, ctime 很好地工作,而不是在一个表(它通常不好),但也许在一个时钟。但是,我个人建议,在Python处理时间时,要么使用Unix时间,要么使用时区感知UTC datetime 目的。


207
2018-02-18 05:08





from time import time

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

Unix和Windows平台有一些区别。


113
2018-01-06 13:55





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

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

这个  有更多细节。


83
2018-01-06 05:02





所有好的建议,但我发现它最容易使用 ctime() 我:

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

这给出了当前本地时间的格式良好的字符串表示。


45
2017-10-31 15:39





如果您需要当前时间作为 time 目的:

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

35
2017-12-27 10:24