Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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右侧与左侧时间戳和DST_Python_Dst_Timestamp With Timezone - Fatal编程技术网

python右侧与左侧时间戳和DST

python右侧与左侧时间戳和DST,python,dst,timestamp-with-timezone,Python,Dst,Timestamp With Timezone,我想知道python是否区分了左侧(左旋)和右侧(右旋)时间戳。在DST日本地化时间戳时,这会成为一个问题 假设我在当地欧洲时间右键标记了半小时值,2014年3月30日,DST从02:00到03:00发生了变化 2014-03-30 00:30:00 2014-03-30 01:00:00 2014-03-30 01:30:00 2014-03-30 02:00:00 2014-03-30 03:30:00 2014-03-30 04:00:00 如果我想本地化这些时间戳,我自然会得到一个错误

我想知道python是否区分了左侧(左旋)和右侧(右旋)时间戳。在DST日本地化时间戳时,这会成为一个问题

假设我在当地欧洲时间右键标记了半小时值,2014年3月30日,DST从02:00到03:00发生了变化

2014-03-30 00:30:00
2014-03-30 01:00:00
2014-03-30 01:30:00
2014-03-30 02:00:00
2014-03-30 03:30:00
2014-03-30 04:00:00
如果我想本地化这些时间戳,我自然会得到一个错误:

NonExistentTimeError: 2014-03-30 02:00:00

因为那天我的本地时区没有时间戳02:00。因此,我想知道python是否能够区分左手/右手时间戳?

我认为正确的方法是在做任何算术时使用UTC,并使用
pytz
包从UTC转换到UTC,它支持DST更改。

pytz
允许您使用
is_DST
参数选择DST转换前后的utc偏移:

>>> import pytz
>>> tz = pytz.timezone('Europe/Paris')                                                               
>>> from datetime import datetime                                                                    
>>> naive = datetime.strptime('2014-03-30 02:00:00', '%Y-%m-%d %H:%M:%S')                            
>>> tz.localize(naive, is_dst=None)                            
Traceback (most recent call last)
...
NonExistentTimeError: 2014-03-30 02:00:00
>>> tz.localize(naive) #XXX WRONG
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>)
>>> tz.normalize(tz.localize(naive)) # you want this (default is after the transition)
datetime.datetime(2014, 3, 30, 3, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>)
>>> tz.localize(naive, is_dst=False) #XXX WRONG 
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>)
>>> tz.localize(naive, is_dst=True) #XXX WRONG 
datetime.datetime(2014, 3, 30, 2, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>)
>>> tz.normalize(tz.localize(naive, is_dst=False)) # time corresponding to the offset
datetime.datetime(2014, 3, 30, 3, 0, tzinfo=<DstTzInfo 'Europe/Paris' CEST+2:00:00 DST>)
>>> tz.normalize(tz.localize(naive, is_dst=True)) # time corresponding to the offset
datetime.datetime(2014, 3, 30, 1, 0, tzinfo=<DstTzInfo 'Europe/Paris' CET+1:00:00 STD>)
导入pytz >>>tz=pytz.时区(“欧洲/巴黎”) >>>从日期时间导入日期时间 >>>naive=datetime.strtime('2014-03-30 02:00:00','%Y-%m-%d%H:%m:%S') >>>本地化(天真,isdst=None) 回溯(最近一次呼叫最后一次) ... 不存在时间错误:2014-03-30 02:00:00 >>>tz.本地化(幼稚)#XXX错误 datetime.datetime(2014,3,30,2,0,tzinfo=) >>>规格化(tz.localize(naive))#您需要它(默认值是在转换之后) datetime.datetime(2014,3,30,3,0,tzinfo=) >>>tz.localize(天真,是否u dst=False)#XXX错误 datetime.datetime(2014,3,30,2,0,tzinfo=) >>>z.localize(天真,u dst=True)#XXX错了 datetime.datetime(2014,3,30,2,0,tzinfo=) >>>tz.normalize(tz.localize(naive,isdst=False))与偏移量对应的时间 datetime.datetime(2014,3,30,3,0,tzinfo=) >>>tz.normalize(tz.localize(naive,isdst=True))与偏移量对应的时间 datetime.datetime(2014,3,30,1,0,tzinfo=)
如果您确定时间戳严格递增,则可能不存在TimeError表明您的输入错误或您使用了错误的时区来解释它。我处理时间问题已经有很长一段时间了,我从未听说过“左手”与“右手”或“左旋”与“右旋”这两个术语应用于时间戳。如果这是一个已知的事情,我只是没有听说过,那么请告诉我你的来源。不管是哪种方式,请准确解释你所说的区别是什么意思,这样其他人也可以学习。@Matt:想想在一个时间间隔内记录的数据,比如30分钟,但数据采样系统只存储聚合值,通常是该时间间隔内的平均值、最大值、最小值。那么时间戳,比如02:00,是不明确的,因为它可能指的是间隔[01:30-02:00]或间隔[02:00-02:30]。前一种情况是右手盖章,后一种情况是左手盖章。希望这能解释得更清楚!当涉及时间时,通常使用半开间隔。示例:
[01:30-2:00][02:00-2:30)
。按照您的术语,这些时间间隔是“左戳”的。我从未遇到过右戳的时间间隔。想想您可能参加过的任何事件-结束时间是事件结束时,因此它不是该时间间隔的一部分。