Python 如何将格式为YYYY MM DDThh:MM:ssTZD的日期时间转换为UTC日期时间?
我有格式字符串Python 如何将格式为YYYY MM DDThh:MM:ssTZD的日期时间转换为UTC日期时间?,python,string,datetime,Python,String,Datetime,我有格式字符串YYYY-MM-DDThh:MM:ssTZD,其中TZD是-hh:MM或+hh:MM。示例:2020-09-18T10:27:29-07:00。如何在python中将其转换为UTC日期时间 2020-09-18T10:27:29-07:00是当地时间。我想将所有本地时间转换为UTC日期时间 我尝试的是: time = "2020-09-18T10:27:29-07:00" datetime.fromisoformat(time).utcnow() 这似乎不起作
YYYY-MM-DDThh:MM:ssTZD
,其中TZD
是-hh:MM
或+hh:MM
。示例:2020-09-18T10:27:29-07:00
。如何在python中将其转换为UTC日期时间
2020-09-18T10:27:29-07:00
是当地时间。我想将所有本地时间转换为UTC日期时间
我尝试的是:
time = "2020-09-18T10:27:29-07:00"
datetime.fromisoformat(time).utcnow()
这似乎不起作用python包python dateutil将起作用():
从dateutil导入解析器
time=“2020-09-18T10:27:29-07:00”
结果=parser.isoparse(时间)
使用安装dateutil
pip安装python-dateutil
python包python dateutil将实现以下功能():
从dateutil导入解析器
time=“2020-09-18T10:27:29-07:00”
结果=parser.isoparse(时间)
使用安装dateutil
pip安装python-dateutil
如何转换?
要将带有UTC偏移量的时间戳转换为UTC(偏移量=0),请使用
DST转换如何?
夏令时转换以UTC偏移表示。例如,对于时区美洲/洛杉矶,DST转换如下
"2020-03-08T00:00:00-08:00"
"2020-03-08T01:00:00-08:00"
"2020-03-08T03:00:00-07:00"
"2020-03-08T04:00:00-07:00"
使用上面的代码转换为UTC,时间戳将显示为
"2020-03-08T08:00:00+00:00"
"2020-03-08T09:00:00+00:00"
"2020-03-08T10:00:00+00:00"
"2020-03-08T11:00:00+00:00"
如何恢复原始UTC偏移量?
这意味着将UTC转换为特定时区中的时间-因此您需要一个时区,尤其是处理DST转换。例:
from zoneinfo import ZoneInfo # Python 3.9; for Python <3.9 use dateutil.tz.gettz
l = ["2020-03-08T08:00:00+00:00", "2020-03-08T09:00:00+00:00",
"2020-03-08T10:00:00+00:00", "2020-03-08T11:00:00+00:00"]
for t in l:
print(datetime.fromisoformat(t).astimezone(ZoneInfo('America/Los_Angeles')))
2020-03-08 00:00:00-08:00
2020-03-08 01:00:00-08:00
2020-03-08 03:00:00-07:00
2020-03-08 04:00:00-07:00
从zoneinfo导入zoneinfo#Python 3.9;对于Python,如何转换?
要将带有UTC偏移量的时间戳转换为UTC(偏移量=0),请使用
DST转换如何?
夏令时转换以UTC偏移表示。例如,对于时区美洲/洛杉矶,DST转换如下
"2020-03-08T00:00:00-08:00"
"2020-03-08T01:00:00-08:00"
"2020-03-08T03:00:00-07:00"
"2020-03-08T04:00:00-07:00"
使用上面的代码转换为UTC,时间戳将显示为
"2020-03-08T08:00:00+00:00"
"2020-03-08T09:00:00+00:00"
"2020-03-08T10:00:00+00:00"
"2020-03-08T11:00:00+00:00"
如何恢复原始UTC偏移量?
这意味着将UTC转换为特定时区中的时间-因此您需要一个时区,尤其是处理DST转换。例:
from zoneinfo import ZoneInfo # Python 3.9; for Python <3.9 use dateutil.tz.gettz
l = ["2020-03-08T08:00:00+00:00", "2020-03-08T09:00:00+00:00",
"2020-03-08T10:00:00+00:00", "2020-03-08T11:00:00+00:00"]
for t in l:
print(datetime.fromisoformat(t).astimezone(ZoneInfo('America/Los_Angeles')))
2020-03-08 00:00:00-08:00
2020-03-08 01:00:00-08:00
2020-03-08 03:00:00-07:00
2020-03-08 04:00:00-07:00
从zoneinfo导入zoneinfo#Python 3.9;对于Python不幸的是,我的计算机找不到要安装的dateutil版本来测试前面的响应。这里有一种在Python中将新时区实现为时间字符串(ISO 8601)的方法,但它也可以扩展到其他语言(只需更改语法)。我还(从计算机上)获取日期和时间,而不是仅仅输入字符串。然后转换它。这对于天气、新闻、股票/加密API尤其有用,在这些API中,您可以非常快速地收集大量数据。你现在可以把他们的时间转换成更容易理解的格式
import datetime#此库包含命令,如果编译器找不到该库,则需要安装该库(pip install datetime或pip3 install datetime)
dt=datetime.datetime.utcnow().isoformat()
#dt=datetime.datetime.now().strftime(“%Y-%m-%dt%H:%m:%S”)#已经在正确的时区中
dt+='Z'#为正确的ISO 8601在末尾添加一个Z
dt=dt[:19]#将管柱切割至最低要求
打印(dt+‘UTC(ISO 8601格式)’)
tiz=float(dt[11]+dt[12])#hour是该字符串中的第11个和第12个字符
tiz-=8#太平洋标准时间为UTC-8(如果它在前面而不是-=,则为put+=)
如果tiz>23:#小时的上限为23
tiz-=24
其他:
如果tiz不幸,我的计算机无法找到dateutil的版本来安装以测试之前的响应。这里有一种在Python中将新时区实现为时间字符串(ISO 8601)的方法,但它也可以扩展到其他语言(只需更改语法)。我还(从计算机上)获取日期和时间,而不是仅仅输入字符串。然后转换它。这对于天气、新闻、股票/加密API尤其有用,在这些API中,您可以非常快速地收集大量数据。你现在可以把他们的时间转换成更容易理解的格式
import datetime#此库包含命令,如果编译器找不到该库,则需要安装该库(pip install datetime或pip3 install datetime)
dt=datetime.datetime.utcnow().isoformat()
#dt=datetime.datetime.now().strftime(“%Y-%m-%dt%H:%m:%S”)#已经在正确的时区中
dt+='Z'#为正确的ISO 8601在末尾添加一个Z
dt=dt[:19]#将管柱切割至最低要求
打印(dt+‘UTC(ISO 8601格式)’)
tiz=float(dt[11]+dt[12])#hour是该字符串中的第11个和第12个字符
tiz-=8#太平洋标准时间为UTC-8(如果它在前面而不是-=,则为put+=)
如果tiz>23:#小时的上限为23
tiz-=24
其他:
如果tizIt返回datetime.datetime(2020,9,18,10,27,29,tzinfo=tzoffset(None,-25200))
我理解这里的tzinfo是什么。tzinfo
是secondsPython标准库中与UTC的时区偏移量,它已经有效地做到了这一点,不需要第三方库。此外,OP想要转换,而不仅仅是解析。它返回datetime.datetime(2020,9,18,10,27,29,tzinfo=tzoffset(None,-25200))
我理解这里的tzinfo是什么。tzinfo
是second中UTC的时区偏移量Spython的标准库已经有效地做到了这一点,不需要第三方库。此外,OP希望转换,而不仅仅是解析。从datetime模块导入时区,然后您可以像datetime.fromisoformat(t).astimezone(timezone.utc)
那样进行转换,但它不起作用。如果将上述时间换算为UTC时间,则仍应为2020-09-18T10:27:29。但您的方式给出UTC+7。您的意思是它无法按您的预期工作UTC-7时的10小时是UTC+0时的17小时,UTC偏移量就是这样工作的。很抱歉,您所做的是正确的。这是否考虑到了日间保存?从datetime模块导入时区,然后您可以像datetime.fromisoformat(t).astimezone(timezone.utc)
It这样进行转换