如何将具有Etc / GMT的日期字符串转换为Python日期时间?

时间:2018-06-26 12:19:53

标签: python python-3.6

Apple返回的收据过期日期格式很奇怪:

  

2018-06-18 15:03:55 Etc / GMT

from datetime import datetime
dt = datetime.strptime('2018-06-18 15:03:55 Etc/GMT', '%Y-%m-%d %H:%M:%S %Z')

Etc和GMT都相同。

我试图将其像这样转换为datetime对象,但是这样做失败。

ValueError: time data '2018-06-18 15:03:55 Etc/GMT' does not match format '%Y-%m-%d %H:%M:%S %Z'

为什么首先要定义两个时区?以及如何让Python理解它?

2 个答案:

答案 0 :(得分:1)

实际上,Etc/GMT appears to be a valid, existing time zone只是日期时间似乎无法识别它。如果可以安装pytz,则可以执行以下操作:

from datetime import datetime
import pytz

dt, tz = '2018-06-18 15:03:55 Etc/GMT'.rsplit(maxsplit=1) # rsplit() for simplicity, obviously re would make this safer

dto = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.timezone(tz))
print(dto) # result: 2018-06-18 15:03:55+00:00

答案 1 :(得分:0)

我不确定这是否正确,但是是否有帮助。

import re
from dateutil.parser import parse

s = '2018-06-18 15:03:55 Etc/GMT'
print( parse(re.sub("(?<=:\d{2}\s).*\/", r"", s)) )

输出:

2018-06-18 15:03:55+00:00
  • 我正在使用正则表达式从src日期时间中删除Etc/
  • 使用dateutil转换为日期时间对象。