python中UTC偏移量的疯狂使用(to_datetime panda函数和datetime对象)
从几个小时以来,我对这个话题已经无动于衷了 作为输入,我将时间戳存储为列表中的字符串:python中UTC偏移量的疯狂使用(to_datetime panda函数和datetime对象),python,pandas,datetime,Python,Pandas,Datetime,从几个小时以来,我对这个话题已经无动于衷了 作为输入,我将时间戳存储为列表中的字符串: 0 Sat Mar 30 2019 21:00:00 GMT+0100 1 Sat Mar 30 2019 22:00:00 GMT+0100 2 Sat Mar 30 2019 23:00:00 GMT+0100 当我将它们转换为datetime对象时,时区是颠倒的: GC['date'] = pd.to_datetime(my_timestamps) 0 2019-03-
0 Sat Mar 30 2019 21:00:00 GMT+0100
1 Sat Mar 30 2019 22:00:00 GMT+0100
2 Sat Mar 30 2019 23:00:00 GMT+0100
当我将它们转换为datetime对象时,时区是颠倒的:
GC['date'] = pd.to_datetime(my_timestamps)
0 2019-03-30 21:00:00-01:00
1 2019-03-30 22:00:00-01:00
2 2019-03-30 23:00:00-01:00
我仔细检查了GMT+1在谷歌上的含义
考虑到UTC时间9点,GMT+1时间是10点:比UTC多1小时
因此,要获得UTC,应将GMT+1时间偏移-1小时
因此,我可以在偏移量中使用-1,然后:
0 2019-03-30 21:00:00-01:00
现在,当我尝试“解决”偏移时,我得到:
GC['date2'] = pd.to_datetime(my_timestamps, utc=True)
0 2019-03-30 22:00:00+00:00
1 2019-03-30 23:00:00+00:00
2 2019-03-31 00:00:00+00:00
天哪,偏移量倒过来了。
好的,让我们再次与谷歌核实一下:
对于新加坡与UTC,代码输出为+8小时的偏移量
Singapore Time instance:2017-02-14 12:15:01.000099+08:00
UTC Offset for Singapore Time:8:00:00
从新加坡时间开始,要找到UTC时间,您必须减去以下8小时:
Singapore time: 5 hour AM
UTC time: 21 hour PM
因此,故障似乎出现在转换步骤GMT+1->-01:00到_datetime期间
请问,有人知道如何解决这个问题吗?
我事先感谢你的帮助
最好的
Pierre这不是一个完整的答案,但我已经找到了错误所在。 pandas是执行实际解析的dateutils解析函数,该函数存在错误
>>from dateutil.parser import parse
>>parse('Sat Mar 30 2019 21:00:00 GMT+0100')
datetime.datetime(2019, 3, 30, 21, 0, tzinfo=tzoffset(None, -3600))
>>parse('Sat Mar 30 2019 21:00:00+0100')
datetime.datetime(2019, 3, 30, 21, 0, tzinfo=tzoffset(None, 3600))
注意第一个输出中的-3600,而第二个输出中的值应该是+3600
但是从dateutil的角度来看,当timestamp被指定为GMT+int时,这看起来像是一种“预期”行为
因此,他们将GMT+1解释为“我的时间加1小时就是GMT”,这对我来说是一种非常不标准的解释 你确定这不对吗,我得到的时间戳对象是timestamp('2019-03-30 21:00:00-0100',tz='tzoffset(None,-3600')),datetime.datetime(2019,3,30,21,0,tzinfo=tzoffset(None,-3600)),您好,我把它提交给了Github bugtracker。我认为当以iso格式重写时,GMT+1h应该保持UTC+1h。当我将这些时间戳设置为数据帧的索引,并激活verify_integrity时,我看到了问题:由于这个问题(我还不敢称之为bug),这个检查识别出了重复的索引。我将报告pandas团队的任何反馈Hello Rajendra,是的,我在pandas Github中发布了一个but,他们将我重新定向到dateutil。请问,作为解决办法,您的建议是什么?我发现了这个堆栈溢出问题,提出了一个。我正要试试@pierre_j是的,这看起来像是一个标准问题。我建议您只需在原始源文件中执行“查找和替换”即可完全删除“GMT”。然后将正确解析它。
# Check for something like GMT+3, or BRST+3. Notice
# that it doesn't mean "I am 3 hours after GMT", but
# "my time +3 is GMT". If found, we reverse the
# logic so that timezone parsing code will get it
# right.