以Unix时间戳格式获取当前GMT时间的最简单方法是什么?

Cor*_*ory 132 python time unix-timestamp

Python提供不同的套餐(datetime,time,calendar),可以看出这里为了应对时间.通过使用以下内容来获取当前的GMT时间,我犯了一个大错误time.mktime(datetime.datetime.utcnow().timetuple())

在Unix时间戳中获取当前GMT时间的简单方法是什么?

Edm*_*ett 193

我会使用time.time()来获取自纪元以来秒数的时间戳.

import time

time.time()
Run Code Online (Sandbox Code Playgroud)

输出:

1369550494.884832
Run Code Online (Sandbox Code Playgroud)

对于大多数平台上的标准CPython实现,这将返回UTC值.

  • @ 9000:当地时区无所谓.Unix时间对应于UTC时间(如果我们忽略闰秒的时间).想一想:时间戳是自纪元以来经过的秒数(固定的时刻):为什么它取决于时区机器的本地时钟使用的时间?在任何给定的时刻,Unix时间在世界各地都是一样的.某些(未知)平台可能使用不同的纪元,但其值仍然不依赖于本地时区. (51认同)
  • 问题是您的机器的本地时钟可能不是UTC. (15认同)
  • @JFSebastian:谢谢!这是有道理的,我站得更正了. (3认同)
  • @9000:正确,尽管在任何时间保持很重要的环境中,我总是坚持使用 UTC。他确实要求最简单的解决方案。请注意,在现代平台上使用 CPython,包括 Linux、BSD、Mac OS X 和 Windows,都将返回 time.time() 的 UTC。这反映了 C 标准库的时间函数在这些操作系统上的行为。 (2认同)
  • http://stackoverflow.com/questions/13890935/does-pythons-time-time-return-the-local-or-utc-timestamp (2认同)
  • @Rainb:狭义相对论与我的评论无关(与当地时区没有任何关系) (2认同)

Nic*_*ger 41

这有帮助吗?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime
Run Code Online (Sandbox Code Playgroud)

如何将Python UTC日期时间对象转换为UNIX时间戳

  • FWIW:那不是UTC时间,它是UTC转换为本地时间。要获得 UTC 时间戳,您必须做其他事情。 (2认同)

Mik*_*ikA 31

蟒蛇2蟒蛇3

使用时间模块很好

import time
int(time.time())
Run Code Online (Sandbox Code Playgroud)

1573708436

您也可以使用 datetime 模块,但是当您使用 strftime('%s') 时,但 strftime 将时间转换为您的本地时间!

蟒蛇2

from datetime import datetime
datetime.utcnow().strftime('%s')
Run Code Online (Sandbox Code Playgroud)

蟒蛇3

from datetime import datetime
datetime.utcnow().timestamp()
Run Code Online (Sandbox Code Playgroud)

  • 在 UTC+1 中,“time.time()”和“datetime.utcnow().timestamp()”*不*给出相同的值! (6认同)
  • 仔细观察,datetime.utcnow() 和 datetime.now() 都返回一个简单的日期时间(没有 tzinfo),并且当 tzinfo=null 时,timestamp() 似乎假定为本地日期时间。 (2认同)
  • 如果你得到这个时间戳并将其用于另一个需要真正的纪元时间 Unix 时间戳的系统,你最好使用“datetime.now().timestamp()”,否则另一个会被移动。以我的愚见,我同意@DavidWaterworth,无论时区是什么,时间戳应该总是带回相同的长数字是秒 (2认同)
  • 这是一个错误的答案。除非您处于 UTC+00 tz,否则 `datetime.utcnow().timestamp()` 返回错误结果。`datetime.now().timestamp()` 是正确的。 (2认同)

Sta*_*iel 19

具有微秒十进制分辨率的 Python 3 秒:

from datetime import datetime
print(datetime.now().timestamp())
Run Code Online (Sandbox Code Playgroud)

Python 3 整数秒:

print(int(datetime.now().timestamp()))
Run Code Online (Sandbox Code Playgroud)

警告datetime.utcnow().timestamp()

datetime.utcnow()是一个非时区感知对象。请参阅参考:https : //docs.python.org/3/library/datetime.html#aware-and-naive-objects

对于类似世界标准时间凌晨 1 点的情况:

from datetime import timezone
print(datetime(1970,1,1,1,0,tzinfo=timezone.utc).timestamp())
Run Code Online (Sandbox Code Playgroud)

或者

print(datetime.fromisoformat('1970-01-01T01:00:00+00:00').timestamp())
Run Code Online (Sandbox Code Playgroud)

如果删除tzinfo=timezone.utcor +00:00,您将获得取决于您当前本地时间的结果。例如:您当前时区的 1970 年 1 月 1 日凌晨 1 点 - 这可能是合法的 - 例如,如果您想要出生那一刻的时间戳,您应该使用您出生的时区。但是,来自的时间戳datetime.utcnow().timestamp()既不是本地时间或 UTC 中的当前时刻。例如,我现在在 GMT-7:00,并datetime.utcnow().timestamp()给出未来 7 小时的时间戳


Mar*_*esh 14

或者只是简单地使用datetime标准模块

In [2]: from datetime import timezone, datetime
   ...: int(datetime.now(tz=timezone.utc).timestamp() * 1000)
   ...: 
Out[2]: 1514901741720
Run Code Online (Sandbox Code Playgroud)

您可以根据需要的分辨率截断或相乘。此示例输出毫。

如果您想要正确的Unix时间戳(以秒为单位),请删除* 1000

  • “你可以根据你想要的分辨率截断或乘法”删除 * 1000 部分,你会得到几秒钟。 (2认同)

小智 6

至少在python3中,这是有效的:

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
Run Code Online (Sandbox Code Playgroud)