【问题标题】:Write numpy datetime64 in ISO 8601 with timezone在 ISO 8601 中使用时区编写 numpy datetime64
【发布时间】:2016-02-11 19:43:30
【问题描述】:

在将 numpy datetime64 对象写入 ISO 8601 字符串时如何控制时区?具体来说,我希望时区为“+0000”,就像下面的输入一样。对于这个非常简单的示例,我只希望它打印回原始字符串。

import numpy
print(numpy.datetime64('2014-03-07T17:52:00.000+0000'))

对我来说,它返回

2014-03-07T12:52:00.000-0500

我正在使用 python 3.4、numpy 1.9.2 和 windows。

This 的问题类似,但前两个答案实际上并没有回答问题,第三个答案是针对 unix 的。

【问题讨论】:

  • @ShadowRanger 哪个答案真正回答了这个问题?
  • 接受的答案正确地指出numpy 不支持任何明确的日期时间格式,最高票数表明转换为 Python datetime 可以实现相同的效果。
  • @ShadowRanger 投票最高的答案以“2013-03-09 22:30:54”结尾,这不是那个问题或我所要求的。如果不可能,我想知道更多细节,因为这看起来很奇怪。
  • 转换为 Python 原生日期时间后,您可以使用 datetime.strftime 随意设置格式。 numpy 似乎没有提供任何格式化操作符; Python 类型只有一个__str__ 方法,并且它不带参数,因此需要特殊的格式化函数(或使用__format__ 定义格式小语言)。在内部,datetime64 根本不存储时区。它读取它以转换为 UTC,但之后丢弃它以最小化存储需求。

标签: python datetime numpy timezone


【解决方案1】:
s = '2014-03-07T17:52:00.000+0000'
print(numpy.datetime64(s).item().replace(tzinfo=pytz.UTC).isoformat('T'))

感谢 ShadowRanger 让我朝着正确的方向前进。 item 从 datetime64 获取原始日期时间,然后用 UTC 替换时区,因为我知道在这种情况下就是这样,然后以带有“T”分隔符的 ISO 格式获取它。

【讨论】:

    【解决方案2】:

    这应该可行:

    import numpy, time, os
    
    os.environ['TZ'] = 'GMT'
    time.tzset()
    
    
    print(numpy.datetime64('2014-03-07T17:52:00.000+0000'))
    

    基于这个 stackoverflow 答案:

    https://stackoverflow.com/a/32764078/5915424

    【讨论】:

    • 该方法仅适用于 unix,我使用的是 windows。我还编辑了这个问题以使其为人所知。
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多