【问题标题】:Equivalent of date.utc in pythonpython中date.utc的等价物
【发布时间】:2015-11-09 09:47:04
【问题描述】:

我正在使用 highcharts,并在 Django 网络服务中解析一个 json 以将其发送给我的查看器。

我正在努力做的是在 python 中获得date.utc("1970,9,21") 输出。

在 python 中模拟这个 javascript 函数的最简单方法是什么?

【问题讨论】:

标签: javascript python date


【解决方案1】:

在 Python 中模拟 Date.UTC() from javascript

#!/usr/bin/env python3
from datetime import datetime, timedelta

assert year > 100
utc_time = datetime(year, month, day, hours, minutes, seconds, ms*1000)
millis = (utc_time - datetime(1970, 1, 1)) // timedelta(milliseconds=1)

输入是UTC时间。小时、分钟、秒、毫秒是可选的。该方法返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的(非闰)毫秒数。

在 Python 2 上模拟 / timedelta(milliseconds=1)

#!/usr/bin/env python
from __future__ import division
from datetime import datetime, timedelta

def to_millis(utc_time, epoch=datetime(1970,1,1)):
    td = utc_time - epoch
    assert td.resolution >= timedelta(microseconds=1)
    # return td.total_seconds()*1000 analog
    return (td.microseconds + (td.seconds + td.days * 86400) * 10**6) / 10**3

使用// 获取整数而不是浮点数。

例子:

>>> import datetime
>>> (datetime.date(1970,9,21) - datetime.date(1970, 1, 1)).days * 86400000
22723200000

Converting datetime.date to UTC timestamp in Python

【讨论】:

    【解决方案2】:

    根据您的评论@Stevanicus I want a string similar to 1107216000000 – azelix 这可能是您正在寻找的:

    >>> from time import time
    >>> time()
    1447064407.092834
    >>>
    

    或者您可以使用calendar.timegm(),无论当地时间设置如何,它都会提供 UTC 结果。

    >>> import calendar
    >>> import datetime
    >>> d = datetime.datetime(2015, 11, 9)
    >>> calendar.timegm(d.timetuple())
    1447027200
    >>>
    

    【讨论】:

    • 你不需要日历:>>> d.timestamp() 1447023600.0
    • @MKesper 纠正我如果我错了,但timestamp() 会尊重您的本地时间设置,这将不同于 *Nix 和 Windows?
    • The docs say: 注意 没有方法可以直接从表示 UTC 时间的简单日期时间实例中获取 POSIX 时间戳。如果您的应用程序使用此约定并且您的系统时区未设置为 UTC,您可以通过提供 tzinfo=timezone.utc:timestamp = dt.replace(tzinfo=timezone.utc).timestamp() 或直接计算时间戳:timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1) 来获取 POSIX 时间戳
    • timegm()UTC 时间 转换为 POSIX 时间戳。请勿通过datetime.now()(当地时间)。
    • @J.F.Sebastian Fixed.
    猜你喜欢
    • 2012-07-07
    • 2018-09-06
    • 2013-02-06
    • 2012-03-22
    • 2016-12-27
    • 2013-12-13
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多