生成以下伪时间戳作为flot图形库限制的解决方法

时间:2011-03-04 09:00:58

标签: python flot

目前,我有以下当前时间戳值示例。

1299196800。这意味着

  

2011年3月4日格林威治(格林威治标准时间)0:0:0

     

2011年3月4日马来西亚8:0:0(GMT   8)

目前,如果我的Python脚本将1299196800传递到flot图形javascript库,它将始终显示格林威治的时间4 March 2011 0:0:0而不是马来西亚的时间4 March 2011 8:0:0,尽管客户端计算机正在使用马来西亚时区。

我的python服务器将始终与客户端计算机具有相同的时区。我们希望在客户端显示4 March 2011 8:0:0

因此,关于flot图形库限制的解决方法,而不是传递1299196800,我想传入

# 8 is timezone offset.
# 1299196800 is current timestamp.
pseudo_timestamp = 1299196800 + 8 * 60 * 60 

我可以知道如何在python中生成上述“伪时间戳”?操纵恒定时区是一个好主意吗?白天节约时会遇到什么问题吗?

2 个答案:

答案 0 :(得分:3)

flot中的UTC时间是设计的:查找时间戳here,修复时间偏移是推荐的解决方案。

考虑到flot时间戳以毫秒表示,因此您必须将示例偏移量乘以1000。

但是,使用一个恒定的时间戳并不是一个好主意:通常你会尝试发现客户端偏移量,但是既然你确定它与服务器相同,你可以使用服务器数据来那样做。

使用time.daytime发现夏令时是否处于活动状态,然后相应地使用time.timezometime.altzone来获取以小时为单位的偏移量。

Python doc on time is here

鉴于此,您可以调整转换偏移量的时间戳(以毫秒为单位)并将其添加到时间戳(您已经做过:) :)

答案 1 :(得分:1)

您将datetime对象与tzinfo一起使用,这是时区感知的。 以下是您实际操作的简短摘要。

import datetime
from datetime import tzinfo, timedelta

class GMT8(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=8)
    def tzname(self, dt):
        return "GMT +8"
    def dst(self,dt):
        return timedelta(0)

malaysiatime = GMT8()

o = datetime.datetime.fromtimestamp(1299196800,malaysiatime)
print o
# prints 2011-03-04 08:00:00+08:00