How to get UTC time in Python?
我已经在StackExchange上搜索了一大堆解决方案,但没有什么能满足我的需要。在javascript中,我使用以下公式计算1970年1月1日以来的UTC时间:
1 2 3 4 5 | function UtcNow() { var now = new Date(); var utc = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds()); return utc; } |
什么是等效的python代码?
尝试使用datetime.utcnow()的代码:
1 2 | from datetime import datetime datetime.utcnow() |
为了您的目的,当您需要计算两个日期之间花费的时间量时,您所需要的就是减去结束日期和开始日期。这种减分的结果是一个时间增量对象。
从python文档中:
1 | class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) |
这意味着,默认情况下,您可以获得它定义中提到的任何字段-天、秒、微秒、毫秒、分钟、小时、周。另外,TimeDelta实例的total_seconds()方法:
Return the total number of seconds contained in the duration.
Equivalent to (td.microseconds + (td.seconds + td.days * 24 * 3600) *
10*6) / 10*6 computed with true division enabled.
以最接近原文的形式:
1 2 3 4 5 | import datetime def UtcNow(): now = datetime.datetime.utcnow() return now |
如果您需要知道1970-01-01的秒数,而不是本机python
1 | return (now - datetime.datetime(1970, 1, 1)).total_seconds() |
Python的命名约定与JavaScript中可能使用的命名约定不一致,请参见PEP8。另外,一个只返回另一个函数结果的函数是相当愚蠢的;如果只是为了使它更容易访问,您可以通过简单地分配函数来为它创建另一个名称。上面的第一个示例可以替换为:
1 | utc_now = datetime.datetime.utcnow |
1 2 3 4 5 6 7 8 9 10 11 | import 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) |
从datetime.datetime,您已经可以使用strftime方法导出到时间戳。遵循函数示例:
1 2 3 4 | import datetime def UtcNow(): now = datetime.datetime.utcnow() return int(now.strftime("%s")) |
如果需要微秒,则需要更改导出字符串并强制转换为float-like:
在使用lambda表达式的python 3中,尝试一下;
1 2 | from datetime import datetime utc_now = lambda : datetime.utcnow() |
并正常调用函数;
1 | print(utc_now()) |
具有零外部依赖项的时区感知:
1 2 3 4 | from datetime import datetime, timezone def utc_now(): return datetime.utcnow().replace(tzinfo=timezone.utc) |