目前,我有以下当前时间戳值示例。
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中生成上述“伪时间戳”?操纵恒定时区是一个好主意吗?白天节约时会遇到什么问题吗?
答案 0 :(得分:3)
flot中的UTC时间是设计的:查找时间戳here,修复时间偏移是推荐的解决方案。
考虑到flot时间戳以毫秒表示,因此您必须将示例偏移量乘以1000。
但是,使用一个恒定的时间戳并不是一个好主意:通常你会尝试发现客户端偏移量,但是既然你确定它与服务器相同,你可以使用服务器数据来那样做。使用time.daytime
发现夏令时是否处于活动状态,然后相应地使用time.timezome
或time.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