182

我在 StackExchange 上搜索了一堆解决方案,但没有什么能完全满足我的需要。在 JavaScript 中,我使用以下方法计算自 1970 年 1 月 1 日以来的 UTC 时间:

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 代码是什么?

4

8 回答 8

250

试试这个使用datetime.utcnow()的代码:

from datetime import datetime
datetime.utcnow()

出于您的目的,当您需要计算两个日期之间花费的时间量时,您所需要的只是减去结束日期和开始日期。这种减法的结果是一个timedelta 对象。

来自 python 文档:

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

这意味着默认情况下,您可以获得定义中提到的任何字段 - 天、秒、微秒、毫秒、分钟、小时、周。timedelta 实例也有 total_seconds() 方法:

返回持续时间中包含的总秒数。等效于 (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10* 6) / 10 *6 在启用真除法的情况下计算。

于 2013-04-11T03:35:52.180 回答
120

仅简单的标准库。提供时区感知的日期时间,不像datetime.utcnow().

from datetime import datetime,timezone
now_utc = datetime.now(timezone.utc)
于 2019-10-08T22:34:50.997 回答
47

以最接近原件的形式:

import datetime

def UtcNow():
    now = datetime.datetime.utcnow()
    return now

如果您需要知道 1970-01-01 而不是本机 Python 的秒数datetime,请改用:

return (now - datetime.datetime(1970, 1, 1)).total_seconds()

Python 的命名约定与您在 Javascript 中可能使用的命名约定不一致,请参阅PEP 8。此外,一个简单地返回另一个函数结果的函数是相当愚蠢的。如果只是为了使其更易于访问,您可以通过简单地分配来为函数创建另一个名称。上面的第一个示例可以替换为:

utc_now = datetime.datetime.utcnow
于 2013-04-11T03:36:09.493 回答
23
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) 
于 2018-09-03T08:56:59.237 回答
13

零外部依赖的时区感知:

from datetime import datetime, timezone

def utc_now():
    return datetime.utcnow().replace(tzinfo=timezone.utc)
于 2019-02-25T16:05:38.183 回答
11

从 datetime.datetime 您已经可以使用 strftime 方法导出到时间戳。按照您的功能示例:

import datetime
def UtcNow():
    now = datetime.datetime.utcnow()
    return int(now.strftime("%s"))

如果您想要微秒,您需要更改导出字符串并转换为浮动,如:return float(now.strftime("%s.%f"))

于 2017-03-21T17:19:24.117 回答
7

您可以使用datetime库来获取 UTC 时间,甚至是当地时间。

import datetime

utc_time = datetime.datetime.utcnow() 
print(utc_time.strftime('%Y%m%d %H%M%S'))
于 2021-02-19T06:41:59.493 回答
3

为什么所有回复都基于日期时间而不是时间?我认为是简单的方法!

import time
nowgmt = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
print(nowgmt)
于 2021-08-28T14:14:15.727 回答