2017-04-21 38 views
0

我正在使用python制作x轴上带有日期的NVD3图表。 我最近注意到,在一台机器上显示2017年3月的日期,并在另一台机器上显示2017年2月的另一个时区。使用python将datetime转换为NVD3绘图的整数

我用:

x = datetime(2017, 3, 1) 
1000 * int(time.mktime(x.timetuple())) 
1488355200000L 

也试过:

1000*(x-datetime(1970,1,1)).total_seconds() 
1488326400000.0 

都是关闭的一个月。 在JavaScript中,我想:

var x = new Date(2017 , 3, 1); 
x.getTime(); 
1491030000000 

这是一个比较大的数字,所以可能是正确的答案,但我不知道在Python中的等价物。 有谁知道如何解决这个问题? 以及为什么它在不同时区一个月的不同机器上出现不同?

回答

1

在python中,datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)和参数month应该是1 <= month <= 12

您的代码x = datetime(2017, 3, 1),时间是2017-03-01 00:00:00,它是3月。

在JS中,new Date(year, month, day, hours, minutes, seconds, milliseconds)和参数month应该是0 <= month <= 11

你的代码var x = new Date(2017, 3, 1);,时间是2017-04-01 00:00:00,它是4月份而不是3月份。

而且,当你在python中将第二个转换为毫秒时,更好的多浮点格式1000.0不是int格式。


更新

要使其工作,我不得不增加一天。这是一个边缘案例问题。它与浮点无关:

A_DAY = 86400000 
    xdata = A_DAY + 1000 * (x.replace(tzinfo=None)-datetime(1970,1,1)).total_seconds() 
+0

@max感谢您的更新,希望它能帮助其他人。 –

+0

谢谢你澄清为什么有差异:) – max