Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将格式为YYYY MM DDThh:MM:ssTZD的日期时间转换为UTC日期时间?_Python_String_Datetime - Fatal编程技术网

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这样进行转换