Python Unix时间戳转换及时区

3

大家好!我遇到了时区问题。

我有一个时间戳是2010年7月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格林尼治标准时间,并将(4 * 3600)调整为(5 * 3600)。是否有办法告诉Python不使用我的本地时区,只转换时间戳,或者是否有一种简单的方法可以从packet[20]中减去15分钟?

3个回答

6

在线文档 中有一个方便的表格(你所说的“unix时间”更应该称为“UTC”,即“世界协调时”,而“自纪元以来的秒数”是一个浮点数的“时间戳”……):

使用以下函数在不同的时间表示之间进行转换:

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模块(因为那里有文档;-)。 因此,由于您显然从一个处于UTC的struct_time开始,使用calendar.timegm()获取时间戳(又称“自纪元以来的秒数”),减去15 * 60 = 900(因为度量单位是秒),并将结果“自纪元以来的秒数”放回到UTC的struct_time中,使用time.gmtime。 或者,如果您喜欢在本地时间工作,则使用time.mktimetime.localtime(但如果15分钟可以跨越其切换到DST或返回的瞬间,则可能会出现问题 - 始终在UTC中工作要好得多)。

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


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

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接