Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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中UTC偏移量的疯狂使用(to_datetime panda函数和datetime对象)_Python_Pandas_Datetime - Fatal编程技术网

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.