【问题标题】:Python: Parse timestamp string with 7 digits for microseconds to datetimePython:用 7 位数字将时间戳字符串解析为日期时间的微秒
【发布时间】:2019-04-09 06:24:16
【问题描述】:

我有一个如下所示的时间戳字符串:

2019-02-16T10:41:20.6080000+01:00

我必须将其解析为日期时间。因为微秒是 7 而不是 6 位,所以以下格式不匹配:

timestamp = "2019-03-14T14:37:37.000000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f%z") #ValueError: time data '2019-03-14T14:37:37.0000000+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

如何解析这种格式?

【问题讨论】:

  • 你想要的输出是什么?
  • 你只想要它的日期吗?

标签: python datetime timestamp strptime


【解决方案1】:

看起来您可以使用简单的字符串切片。

例如:

import datetime
timestamp = "2019-02-16T10:41:20.6080000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp[:26], "%Y-%m-%dT%H:%M:%S.%f").date() 

print(parsed_timestamp)

输出:

2019-02-16

【讨论】:

    【解决方案2】:

    使用dparser

    import dateutil.parser as dparser
    dt_1 = '2019-02-16T10:41:20.6080000+01:00'
    print("Datetime: {}".format(dparser.parse(dt_1,fuzzy=True)))
    

    输出

    Datetime: 2019-02-16 10:41:20.608000+01:00
    

    如果你想要日期组件:

    print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))
    

    输出

    Date: 2019-02-16
    

    【讨论】:

      【解决方案3】:

      您的数据实际上有两点错误:您的微秒有七位数字,并且您的时区有一个冒号。

      我会使用正则表达式来解决这个问题:

      timestamp = "2019-02-16T10:41:20.6080000+01:00"
      cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'\1\2\4', timestamp)
      parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
      parsed_timestamp
      

      输出:

      datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 2015-04-02
        相关资源
        最近更新 更多