使用 python 将日期时间转换为整数以进行 NVD3 绘图

using python to convert datetime to integer for NVD3 plotting

我正在使用 python 制作一个 NVD3 图表,在 x 轴上显示日期。 我最近注意到,在一台机器上它显示的日期是 2017 年 3 月,而在另一台具有另一个时区的机器上它显示的是 2017 年 2 月。

我用过:

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。 有谁知道如何纠正这个问题? 以及为什么它在不同时区的不同机器上出现一个月不同?

在python、datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)中,参数月份应为1 <= month <= 12

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

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

您的代码var x = new Date(2017, 3, 1);,时间是2017-04-01 00:00:00,是四月,不是三月。

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


更新

为了让它发挥作用,我不得不加一天。这是一个边缘案例问题。它与浮点无关:

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