python - 如何在 Python 中获取 UTC 日期时间和 utcnow 日期时间之间的差异

标签 python datetime timezone utc

我有一个字符串形式的日期时间 (2016-12-31 23:59),从中我知道它是在 UTC 中定义的。我现在想使用 Python 获取时间增量。我执行此操作的计算机通常位于 CEST 时区 (Europe/Amsterdam),但情况可能并非总是如此,因此我不想在代码。

对于本地时区,这会很好用:

date_str = '2016-12-31 23:59'
print datetime.now() - datetime.strptime(date_str, '%Y-%m-%d %H:%M')

这显然是不正确的,但是将其更改为使用 utcnow() 也是不正确的:

print datetime.utcnow() - datetime.strptime(date_str, '%Y-%m-%d %H:%M')

这无法正常工作,因为现在 strptime 生成的日期时间位于运行此代码的计算机的时区,而 utcnow() 则采用 UTC。

我找到了this SO answer ,但这假设您知道代码运行所在机器的时区,而我不知道。

有没有一种方法可以将 UTC 时区添加到从 datetime.strptime() 获取的 datetime 对象中,以便我可以将其与 进行比较>utcnow()?欢迎提供所有建议

最佳答案

你的代码实际上没问题。您的错误在于以下假设:“由 strptime 产生的日期时间位于运行此代码的计算机的时区中。”

datetime.strptime(date_str, '%Y-%m-%d %H:%M') 将生成一个代表您所说的时间的naive日期时间是在 UTC 时间。

datetime.utcnow() 将生成一个代表 UTC 当前时间的naive日期时间。

因此差异将是准确的。

关于python - 如何在 Python 中获取 UTC 日期时间和 utcnow 日期时间之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759888/

相关文章:

PHP 比较日期时间和时区

java - 将已知时区的日期转换为 UTC 日期

c - 库调用 localtime() 在不同 Linux 平台上的行为

python - 错误 UnicodeDecodeError : 'utf-8' codec can't decode byte 0xbe in position 2: invalid start byte

python - Django "No Module Named URLs"错误

python - 使用 dxl 将 DOORS 对象导出到 csv 文件不会写入所有对象?

javascript - angular js日期输入格式

java - 更改时区而不更改Java中的时间

java - Spring-Boot 应用程序中未保留时区更改

python - SQLAlchemy 相当于 SQL "LIKE"语句