Python unix时间戳转换和时区

时间:2010-08-25 15:15:57

标签: python

嘿所有人!我遇到了时区问题。

我的时间戳是2010-07-26 23:35:03

我真正想做的是从那时起减去15分钟。

我的方法是简单转换为unix时间,减去秒数并转换回来。简单吧?

我的问题是python使用我的本地时区调整返回的unix时间,目前是东部夏令时,我认为是GMT -4。

所以当我这样做时:

 # packet[20] holds the time stamp

 unix_time_value = (mktime(packet[20].timetuple())) 

我得到1280201703,这是星期二,2010年7月27日03:35:03。我可以这样做:

 unix_time_value = (mktime(packet[20].timetuple())) - (4 * 3600)

但现在我必须检查东部标准时间-5 GMT并将(4 * 3600)调整为(5 * 3600)。有没有办法告诉python不使用我的本地时区,只是转换时间戳或者有一个简单的方法来获取数据包[20]并减去15分钟?

3 个答案:

答案 0 :(得分:6)

减去datetime.timedelta(seconds=15*60)

答案 1 :(得分:6)

online docs有一个方便的表(你称之为“unix time”更恰当地称为“UTC”,对于“Universal Time Coordinate”,“自纪元以来的秒数”是一个“时间戳”作为浮...):

  

使用以下功能进行转换   在时间表示之间:

From                        To                           Use

seconds since the epoch     struct_time in UTC           gmtime()

seconds since the epoch     struct_time in local time    localtime()

struct_time in UTC          seconds since the epoch      calendar.timegm()

struct_time in local time   seconds since the epoch      mktime()

其中非限定函数名称来自time模块(因为那是文档的位置;-)。所以,既然您显然以struct_time in UTC开头,请使用calendar.timegm()来获取时间戳(AKA“自纪元以来的秒数”),减去15 * 60 = 900(因为度量单位是秒),并将生成的“自纪元以来的秒数”放回struct_time in UTC time.gmtime。或者,如果您希望在当地时间工作,请使用time.mktimetime.localtime(但如果15分钟可以跨越切换到DST或返回的时刻,则可能会出现问题 - 始终使用UTC是很多发声器。)

当然,要使用calendar.timegm,您的代码中需要import calendar(导入通常最好放在脚本或模块的顶部)。

答案 2 :(得分:1)

向下滚动并阅读从日期中减去的内容:http://pleac.sourceforge.net/pleac_python/datesandtimes.html