我如何获取UTC时间,即自1970年1月1日Unix纪元以来的毫秒数?
对于Python 2代码,请使用datetime.utcnow()
:
from datetime import datetime
datetime.utcnow()
对于Python 3,请使用datetime.now(timezone.utc)
(2.x解决方案在3.x文档中有一个巨大的警告,虽然技术上可行):
from datetime import datetime, timezone
datetime.now(timezone.utc)
当您需要计算两个日期之间所花费的时间时,您只需要减去结束日期和起始日期即可。这种减法的结果是一个timedelta
对象。
来自Python文档:
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
这意味着默认情况下,您可以获取其定义中提到的任何字段 - 天数,秒数,微秒数,毫秒数,分钟数,小时数,周数。此外,timedelta实例具有total_seconds()方法,该方法:
返回持续时间包含的总秒数。 等价于 (td.microseconds + (td.seconds + td.days * 24 * 3600) * 106) / 106使用真除法计算。
时区感知的 datetime
对象,与 datetime.utcnow()
不同:
from datetime import datetime,timezone
now_utc = datetime.now(timezone.utc)
自 Unix 纪元以来的毫秒时间戳:
datetime.now(timezone.utc).timestamp() * 1000
timezone.utc
不存在。 - Mark Ransomdatetime.now().astimezone()
。 - Martin Cejp以最接近您原始表单的形式:
import datetime
def UtcNow():
now = datetime.datetime.utcnow()
return now
datetime
,请使用以下方法代替:return (now - datetime.datetime(1970, 1, 1)).total_seconds()
Python具有与JavaScript中您可能习惯的命名约定不一致的特点,请参阅PEP 8。此外,一个仅返回另一个函数结果的函数相当愚蠢;如果只是为了使其更易访问,您可以通过简单地赋值来为函数创建另一个名称。上面的第一个示例可以替换为:
utc_now = datetime.datetime.utcnow
datetime.timezone
,这样一个适用于 UTC 的合适的 tzinfo
就可以供所有人使用了。所以现代版本变成了:def utc_now():
return datetime.datetime.now(tz=datetime.timezone.utc)
(now - datetime.datetime(1970, 1, 1)).total_seconds()
... 那么 time.time()
呢? - Christzinfo
对象。 - Mark Ransomimport datetime
import pytz
# datetime object with timezone awareness:
datetime.datetime.now(tz=pytz.utc)
# seconds from epoch:
datetime.datetime.now(tz=pytz.utc).timestamp()
# ms from epoch:
int(datetime.datetime.now(tz=pytz.utc).timestamp() * 1000)
from datetime import datetime, timezone
def utc_now():
return datetime.utcnow().replace(tzinfo=timezone.utc)
datetime.utcnow().replace(tzinfo=timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
- Imtiaz Shakil Siddiquedatetime.now(timezone.utc)
有什么不同吗?只是好奇,因为我相信结果完全相同。 - Gagan Deep Singhdatetime
对象。(有时候到达同一目的地可能有多条路径。).replace(tzinfo=timezone.utc)
只是设置了 .tzinfo
成员,而默认情况下该成员不幸地为 None
。 - Mateen Ulhaq从datetime.datetime中,您已经可以使用strftime方法导出时间戳。以下是您的函数示例:
import datetime
def UtcNow():
now = datetime.datetime.utcnow()
return int(now.strftime("%s"))
如果您想要微秒级别的精度,您需要更改导出字符串并进行浮点数转换,例如:return float(now.strftime("%s.%f"))
。time.time()
,
您还可以使用time.mktime(now.timetuple())直接转换为int。
无论如何,对于这种简单情况,time.time()
也是一个有效的选择。
我觉得奇怪的是通过timedelta查找秒数。 - hectorcantostrftime(“%s”)
是依赖于平台的,在Windows上无法工作。(至少在我的Windows 10上不行)。 - Julian Kirsch你可以使用 datetime
库来获取世界标准时间或本地时间。
import datetime
utc_time = datetime.datetime.utcnow()
print(utc_time.strftime('%Y%m%d %H%M%S'))
import time
nowgmt = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
print(nowgmt)
准确来说,UTC格式至少需要T字母:
>>> a=(datetime.datetime.now(timezone.utc))
>>> a.strftime("%Y-%m-%dT%H:%M:%SZ")
'2022-11-28T16:42:17Z'