如何使用strptime在微秒部分上转换7位数的时间戳字符串?

时间:2018-05-24 03:34:02

标签: python python-3.x datetime timestamp

将时间戳作为2016-09-22T13:57:31.2311892-04:00之类的字符串,如何获取日期时间对象?

我已尝试使用strptime,但我遇到了两个问题:

  • 最后,我需要从时区部分删除:,以使%z正常工作。
  • 微秒部分有7位数,但strptime最多只能处理6位数。

有没有办法在传递给strptime之前解析这种格式的时间戳而不修改*字符串本身?

* - 通过修改,我想删除最后一个微秒数字,并删除最后一个:

注意:这是为了在MySQL中插入记录。如果这有帮助。

1 个答案:

答案 0 :(得分:1)

如何转换成这样:

dt = datetime.strptime(s[:-len('2-04:00')], '%Y-%m-%dT%H:%M:%S.%f')
# datetime.datetime(2016, 9, 22, 13, 57, 31, 231189)

https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

突然在django找到了一个有用的方法:

from django.utils.dateparse import parse_datetime
dt = parse_datetime('2016-09-22T13:57:31.2311892-04:00')
# datetime.datetime(2016, 9, 22, 13, 57, 31, 231189, tzinfo=<django.utils.timezone.FixedOffset object at 0x7f20184f8390>)

https://docs.djangoproject.com/en/2.0/ref/utils/#module-django.utils.dateparse

  

另一种pythonic格式(使用maya https://github.com/kennethreitz/maya):

# pip install maya
import maya
maya.parse('2016-09-22T13:57:31.2311892-04:00').datetime()
# datetime.datetime(2016, 9, 22, 17, 57, 31, 231189, tzinfo=<UTC>)