使用 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()
我正在使用 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()