280

Python 提供了不同的包(datetime, time, calendar),可以在此处看到以处理时间。我犯了一个大错误,使用以下方法获取当前的 GMT 时间time.mktime(datetime.datetime.utcnow().timetuple())

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

4

10 回答 10

328

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

import time

time.time()

输出:

1369550494.884832

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

于 2013-05-26T06:42:47.750 回答
242
import time

int(time.time()) 

输出:

1521462189
于 2018-03-19T12:25:06.900 回答
51

这有帮助吗?

from datetime import datetime
import calendar

d = datetime.utcnow()
unixtime = calendar.timegm(d.utctimetuple())
print unixtime

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

于 2013-05-26T01:31:38.080 回答
41

python2python3

使用时间模块很好

import time
int(time.time())

1573708436

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

蟒蛇2

from datetime import datetime
datetime.utcnow().strftime('%s')

蟒蛇3

from datetime import datetime
datetime.utcnow().timestamp()
于 2019-11-14T10:50:27.150 回答
35

Python 3 秒,微秒十进制分辨率:

from datetime import datetime
print(datetime.now().timestamp())

Python 3 整数秒:

print(int(datetime.now().timestamp()))

警告datetime.utcnow().timestamp()

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

对于像 UTC 凌晨 1 点这样的事情:

from datetime import timezone
print(datetime(1970,1,1,1,0,tzinfo=timezone.utc).timestamp())

或者

print(datetime.fromisoformat('1970-01-01T01:00:00+00:00').timestamp())

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

于 2020-09-26T00:32:39.227 回答
26

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

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

您可以根据所需的分辨率截断或相乘。这个例子是输出毫秒。

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

于 2017-06-27T13:31:48.587 回答
6

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

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'
于 2020-04-21T17:11:37.610 回答
3

我喜欢这种方法:

import datetime, time

dts = datetime.datetime.utcnow()
epochtime = round(time.mktime(dts.timetuple()) + dts.microsecond/1e6)

此处发布的其他方法要么不保证在所有平台上为您提供 UTC,要么只报告整秒。如果你想要全分辨率,这可以工作到微秒。

于 2016-10-07T16:58:06.760 回答
2
#First Example:
from datetime import datetime, timezone    
timstamp1 =int(datetime.now(tz=timezone.utc).timestamp() * 1000)
print(timstamp1)

输出:1572878043380

#second example:
import time
timstamp2 =int(time.time())
print(timstamp2)

输出:1572878043

  • 在这里,我们可以看到第一个示例给出的时间比第二个示例更准确。
  • 这里我使用第一个。
于 2019-11-04T14:43:00.803 回答
2
from datetime import datetime as dt
dt.utcnow().strftime("%s")

输出:

1544524990
于 2018-12-11T11:42:02.837 回答