Python解析字符串日期

时间:2019-04-04 10:10:16

标签: python date iso

我有这样的字符串:

2019-04-03 05:10:35+03:00

我需要这样输出日期:

2019-04-03 08:10:35

我的代码:

print(datetime.strptime(str("2019-04-03 05:10:35+03:00"), "%Y-%m-%d %H:%M:%S%z"))

但是我有错误:

  

ValueError:时间数据'2019-04-03 05:10:3​​5 + 03:00'不匹配   格式为'%Y-%m-%d%H:%M:%S%z'

3 个答案:

答案 0 :(得分:1)

问题是您输入的字符串格式不正确。 %z的字符串格式为+HHMM-HHMM;您还有一个额外的:

因此,您可以使用正则表达式对其进行格式化:

import re

source = '2019-04-03 05:10:35+03:00'
formatted = re.sub(r'([+-])(\d\d):(\d\d)', r'\1\2\3', source)

print(datetime.strptime(formatted, "%Y-%m-%d %H:%M:%S%z").astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"))

输出:

2019-04-03 02:10:35

答案 1 :(得分:1)

使用datetimesplit()进行str的操作:

假设是+小时:

from datetime import datetime, timedelta

dt_1 = "2019-04-03 05:10:35+03:00"
date_ = dt_1.split("+")[0]
time_ = date_.split(" ")[1]
to_add = dt_1.split("+")[1]

d = datetime.strptime(date_, "%Y-%m-%d %H:%M:%S")
t = datetime.strptime(time_, "%H:%M:%S")
d += timedelta(hours=int(to_add.split(":")[0]), minutes=int(to_add.split(":")[1]))

print(d)

输出

2019-04-03 08:10:35

答案 2 :(得分:1)

这将起作用

from datetime import datetime

your_date = datetime.strptime("2019-04-03 05:10:35+03:00", "%Y-%m-%d %H:%M:%S%z")

print(your_date.strftime("%Y-%m-%d %H:%M:%S"))

enter image description here

编辑:

如果您计算时区,则为“ +03:00”,如果要将其添加到结果中,请执行以下操作:

from datetime import datetime
your_date = datetime.strptime("2019-04-03 05:10:35+03:00", "%Y-%m-%d%H:%M:%S%z")
print((your_date + timedelta(0, your_date.tzinfo.utcoffset(your_date).seconds)).strftime("%Y-%m-%d %H:%M:%S"))

enter image description here