【问题标题】:What datetime format string is 2017-01-05T14:23:33.986-0500 in PythonPython 中的 2017-01-05T14:23:33.986-0500 是什么日期时间格式字符串
【发布时间】:2017-01-06 15:26:17
【问题描述】:

我有一个字符串:

t = "2017-01-05T14:23:33.986-0500"

我需要将其转换为 Python 日期。

我用过:

t_obj = datetime.strptime(t, '%Y-%m-%dT%H:%M:%S.%f')

我认为它在 YYYY-MM-DD 中,时间为 HH:MM:SS.sss ,但我无法弄清楚 -0500 可能是什么......它可以为 UTC 减去 -5 小时吗?

任何帮助将不胜感激

【问题讨论】:

  • 如果我的回答解决了您的问题,那么您可以接受,我的回答左上角会出现一个空勾
  • t 打印到 2017-01-09T14:01:37.347-0500 并且当我尝试 t_obj = datetime.datetime.strptime(t, '%Y-%m-%dT%H:% M:%S.%f%z') ...我收到如下错误指令错误 ....Traceback(最近一次调用最后):文件“main.py”,第 11 行,在 t_obj = datetime.datetime .strptime(t, '%Y-%m-%dT%H:%M:%S.%f%z') 文件“/usr/lib64/python2.7/_strptime.py”,第 317 行,在 _strptime (bad_directive, format)) ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S.%f%z'
  • 如果我尝试 t="2017-01-05T14:23:33.986-0500" dt.datetime.strptime(t, '%Y-%m-%dT%H:%M:% S.%f%z')..然后我收到以下错误..回溯(最近一次调用最后):文件“main.py”,第 9 行,在 dt.datetime.strptime(t, '%Y -%m-%dT%H:%M:%S.%f%z') NameError: name 'dt' is not defined....
  • 这对我有用,但我运行的是 python 3.4,它应该像你运行 python 2.7 一样工作,你能升级吗?
  • 不,我无法升级......如果我尝试以下代码......import datetime as dt dt=dt.datetime.strptime("2017 -01-05T14:23:33.986", "%Y-%m-%dT%H:%M:%S.%f") 打印 dt....... .........它有效,但如果我尝试 import datetime as dt dt=dt.datetime.strptime("2017-01-05T14:23:33.986-0500", "%Y-%m-% dT%H:%M:%S.%f%z") print dt....它给出了 z bad 指令错误......

标签: python


【解决方案1】:

%z 是您需要的,它是与 UTC 的时区偏移量,请参阅docs

%z - 格式为 +HHMM 或 -HHMM 的 UTC 偏移量(如果对象为空字符串 很幼稚)。 (空), +0000, -0400, +1030

In [89]:
t= "2017-01-05T14:23:33.986-0500"
dt.datetime.strptime(t, '%Y-%m-%dT%H:%M:%S.%f%z')

Out[89]:
datetime.datetime(2017, 1, 5, 14, 23, 33, 986000, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))

【讨论】:

    【解决方案2】:

    EdChum 的answer 绝对正确。但是,有一种更简单的方法来解析日期 - python-dateutil:

    >>> from dateutil.parser import parse
    >>> parse("2017-01-05T14:23:33.986-0500")
    datetime.datetime(2017, 1, 5, 14, 23, 33, 986000, tzinfo=tzoffset(None, -18000))
    

    parse() 函数非常健壮,能够处理多种日期格式:

    >>> parse("Friday January 6, 2017 11:12 AM")
    datetime.datetime(2017, 1, 6, 11, 12)
    

    这是在 3.6.0 上,dateutil 2.6.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多