【问题标题】:using python to convert datetime to integer for NVD3 plotting使用 python 将日期时间转换为整数以进行 NVD3 绘图
【发布时间】:2017-04-21 23:03:08
【问题描述】:

我正在使用 python 制作一个以 x 轴为日期的 NVD3 图表。 我最近注意到,在一台机器上显示日期为 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 nvd3.js


    【解决方案1】:

    在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()
    

    【讨论】:

    • @max 感谢您的更新,希望它对其他人也有帮助。
    • 感谢您澄清存在差异的原因 :)
    猜你喜欢
    • 1970-01-01
    • 2019-02-16
    • 2019-06-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2012-04-02
    相关资源
    最近更新 更多