在python中将整个解释器设置为UTC

在python中将整个解释器设置为UTC,python,utc,Python,Utc,我希望确保整个脚本在默认情况下仅使用UTC。你知道怎么做吗?我一直在寻找解决方案,但不知怎么的,我没有发现任何有效的方法。我真正想要的是确保: import datetime # SOME CODE HERE print(datetime.datetime.fromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S')) 是否在任何机器上打印1970-01-01 00:00:00,没有更多问题,并且所有内容都被视为UTC。我认为这应该有效: import date

我希望确保整个脚本在默认情况下仅使用UTC。你知道怎么做吗?我一直在寻找解决方案,但不知怎么的,我没有发现任何有效的方法。我真正想要的是确保:

import datetime
# SOME CODE HERE
print(datetime.datetime.fromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S'))

是否在任何机器上打印1970-01-01 00:00:00,没有更多问题,并且所有内容都被视为UTC。

我认为这应该有效:

import datetime
import time
import os

os.environ["TZ"] = "UTC"
time.tzset()

print(datetime.datetime.fromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S'))

您可以使用
datetime
中的便利函数,该函数是专门为此目的设计的,无需通过其他库设置时区:

from datetime import datetime
# SOME CODE HERE
print(datetime.utcfromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S'))
# '1970-01-01 00:00:00'

但是,如果您还需要将此UTC区域用于其他用途,例如第三方库等,那么使用
tzset()
的解决方案可能更方便:)

如果您确保在导入
datetime
之前设置了环境变量
TZ
,那么就不必使用
time.tzset()

例如:

>>> import os
>>> os.environ["TZ"] = "UTC"
>>> import datetime
>>> print(datetime.datetime.fromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S'))
1970-01-01 01:00:00
为了避免编辑Python脚本,您可以在执行时设置环境变量。例如,在Linux命令行中:

env TZ=UTC python myscript.py

这是可行的,非常感谢:)我已经试着让它工作了半个小时,我在其他线程上找到了
os.environ[“TZ”]=“UTC”
,但是我缺少了
time.tzset()
line^^。我知道这个函数,但在这种情况下,只有当前调用使用UTC,对吗?我想做的是确保整个解释器都是UTC的。是的,没错,我编辑了我的答案来思考:)啊,有趣,这就是为什么我以前找到的很多答案只有
os.environ
行,我想:)我想我更喜欢L3via的答案,因为它更健壮,在这个意义上,如果出于任何原因之前导入了一些其他模块,它们应该被强制移动到UTC,对吗?:)@Zorglub29我认为最健壮的解决方案是mabergerx的解决方案,它根本不依赖于更改
TZ
。但您的要求似乎是在不更改代码的情况下使其工作。(显然,除非我误解了。)我不这么认为,我真的想确保整个口译员在这之后的会话中永远使用UTC。@Zorglub29好的,明白了-也许我误解了你的“没有更多麻烦”的意思。即使如此,如果您能够对代码进行必要的更改,显然最好使用
utcfromtimestamp
在UTC中显式工作(如果您需要的话),而不是试图绕过代码调用使用本地时间记录的函数这一事实。我的解决方案和L3viathan的解决方案本质上都是这种变通方法的变体,基于对您愿意做的更改很少的不同理解。