假设我有一个变量t,它设置为:
datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)如果我说str(t),我会得到:
'2009-07-10 18:44:59.193982+00:00'除了在本地时区而不是UTC中打印之外,我如何获得类似的字符串?
发布于 2009-07-10 18:54:42
我觉得你应该四处看看: datetime.astimezone()
另请参见pytz模块--它非常容易使用--作为示例:
eastern = timezone('US/Eastern')示例:
from datetime import datetime
import pytz
from tzlocal import get_localzone # $ pip install tzlocal
utc_dt = datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=pytz.utc)
print(utc_dt.astimezone(get_localzone())) # print local time
# -> 2009-07-10 14:44:59.193982-04:00发布于 2019-02-23 10:02:35
此脚本演示了使用astimezone()显示本地时区的几种方法
#!/usr/bin/env python3
import pytz
from datetime import datetime, timezone
from tzlocal import get_localzone
utc_dt = datetime.now(timezone.utc)
PST = pytz.timezone('US/Pacific')
EST = pytz.timezone('US/Eastern')
JST = pytz.timezone('Asia/Tokyo')
NZST = pytz.timezone('Pacific/Auckland')
print("Pacific time {}".format(utc_dt.astimezone(PST).isoformat()))
print("Eastern time {}".format(utc_dt.astimezone(EST).isoformat()))
print("UTC time {}".format(utc_dt.isoformat()))
print("Japan time {}".format(utc_dt.astimezone(JST).isoformat()))
# Use astimezone() without an argument
print("Local time {}".format(utc_dt.astimezone().isoformat()))
# Use tzlocal get_localzone
print("Local time {}".format(utc_dt.astimezone(get_localzone()).isoformat()))
# Explicitly create a pytz timezone object
# Substitute a pytz.timezone object for your timezone
print("Local time {}".format(utc_dt.astimezone(NZST).isoformat()))它输出以下内容:
$ ./timezones.py
Pacific time 2019-02-22T17:54:14.957299-08:00
Eastern time 2019-02-22T20:54:14.957299-05:00
UTC time 2019-02-23T01:54:14.957299+00:00
Japan time 2019-02-23T10:54:14.957299+09:00
Local time 2019-02-23T14:54:14.957299+13:00
Local time 2019-02-23T14:54:14.957299+13:00
Local time 2019-02-23T14:54:14.957299+13:00在Python3.6中,不带时区对象的astimezone()调用缺省为本地区域(docs)。这意味着您不需要导入tzlocal,只需执行以下操作:
#!/usr/bin/env python3
from datetime import datetime, timezone
utc_dt = datetime.now(timezone.utc)
print("Local time {}".format(utc_dt.astimezone().isoformat()))发布于 2010-01-15 20:23:54
我认为最好的方法是使用datetime.tzinfo文档中定义的LocalTimezone类(转到http://docs.python.org/library/datetime.html#tzinfo-objects并向下滚动到“示例tzinfo类”部分):
假设Local是LocalTimezone的一个实例
t = datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=utc)
local_t = t.astimezone(Local)然后,str(local_t)给出了:
'2009-07-11 04:44:59.193982+10:00'这就是你想要的。
(注意:这可能对你来说很奇怪,因为我在澳大利亚新南威尔士州,比UTC早10或11个小时)
https://stackoverflow.com/questions/1111317
复制相似问题