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

为了处理时间,Python提供了不同的包(datetimetimecalendar),可以看到在这里。我犯了一个大错误,使用下面的方法来获取当前的格林尼治时间time.mktime(datetime.datetime.utcnow().timetuple())

用Unix时间戳获取当前格林尼治时间的简单方法是什么?

453328 次浏览

这有用吗?

from datetime import datetime
import calendar


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

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

我将使用time.time()来获得一个时间戳,以秒为单位。

import time


time.time()

输出:

1369550494.884832

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

我喜欢这个方法:

import datetime, time


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

这里发布的其他方法要么不保证在所有平台上为您提供UTC,要么只报告整个秒数。如果你想要完整的分辨率,这个可以做到微秒级。

或者仅仅使用datetime标准模块

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

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

如果你想要一个合适的Unix时间戳(以秒为单位),可以删除* 1000

import time


int(time.time())

输出:

1521462189
from datetime import datetime as dt
dt.utcnow().strftime("%s")

输出:

1544524990
#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

  • 在这里,我们可以看到第一个例子给出的时间比第二个更准确。
  • 这里我用的是第一个。

python2python3

使用时间模块是很好的

import time
int(time.time())

1573708436

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

python2

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

python3

from datetime import datetime
datetime.utcnow().timestamp()

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

>>> datetime.strftime(datetime.utcnow(), "%s")
'1587503279'

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.utc+00:00,你将得到依赖于当前本地时间的结果。例如:当前时区1970年1月1日凌晨1点——这可能是合法的——例如,如果你想要你出生那一刻的时间戳,你应该使用你出生的时区。然而,来自datetime.utcnow().timestamp()的时间戳既不是本地时间的当前时刻,也不是UTC。例如,我现在在GMT-7:00,而datetime.utcnow().timestamp()给出了一个来自未来7小时!的时间戳