如何使用 python strptime 和 strftime 将 2017-02-09T09:43:04.216+1000 等日期时间格式转换为 09-Feb-2017?

How to convert a datetime format like 2017-02-09T09:43:04.216+1000 to 09-Feb-2017 using python strptime and strftime?

我有一些创建和更新的日期时间从 JIRA API 动态传入,用于每月获取 JIRA 票证的自动化过程,使用 python 脚本加载到 excel sheet.

部分样本日期如下:

  1. 2017-02-09T09:33:33.508+1100
  2. 2017-05-19T13:59:36.735+1000

我想以 %d-%b-%Y(例如:2017 年 2 月 9 日)这样的格式呈现

我试过使用 python datetime.strptimestrftime

示例代码如下:

from datetime import datetime

datetimeObj = datetime.strptime('2017-02-09T09:43:04.216+1000', '%Y-%m-%dT%H:%M:%S.%f+1000')

print(datetimeObj.strftime('%d-%b-%Y'))

这给了我预期的结果,但现在我已经硬编码了我想要的日期和我添加的日期时间格式的值 +1000 但是由于它的动态变化的日期时间我在日期时间结束时卡住了+1100.

等值

我认为最后一部分与夏令时有关,但在这种情况下我找不到合适的格式。

是否可以为最后的 +1000+1100 部分转换日期时间格式,而不是像这样 '%Y-%m-%dT%H:%M:%S.%f+1000' 这样的硬编码?

似乎您已经找到了解决方案,但如果这始终是格式..

你可以做到:

date = '2017-02-09T09:33:33.508+1100'

d = re.search('[0-9]+-[0-9]+-[0-9]+',date).group()
d = re.search('([0-9]+-)+[0-9]+',date).group()
d = date.split('T')[0]
d = date[0:10]

或者这个的一些变体...然后:

print(datetime.strptime(d,'%Y-%m-%d').strftime('%d-%b-%Y'))

print(datetime.strptime(''.join(re.findall('\d+',date)[0:3]),'%Y%m%d').strftime('%d-%b-%Y'))

:)

刚刚找到了这个问题的答案。如果有人像我一样被卡住,希望这也能帮助其他人。

from datetime import datetime

datetimeObj = datetime.strptime('2017-02-09T09:43:04.216+1000', '%Y-%m-%dT%H:%M:%S.%f%z')

print(datetimeObj.strftime('%d-%b-%Y'))

使用%z即可解决问题。

%z 是 python strftime()strptime() 中的 UTC 偏移量,格式为 +HHMM 或 -HHMM(如果对象是天真的,则为空字符串)。

当时间格式末尾有 (empty), +0000, -0400, +1030 等值时,这会有所帮助。