如何使用 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.
部分样本日期如下:
- 2017-02-09T09:33:33.508+1100
- 2017-05-19T13:59:36.735+1000
我想以 %d-%b-%Y(例如:2017 年 2 月 9 日)这样的格式呈现
我试过使用 python datetime.strptime
和 strftime
。
示例代码如下:
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
等值时,这会有所帮助。
我有一些创建和更新的日期时间从 JIRA API 动态传入,用于每月获取 JIRA 票证的自动化过程,使用 python 脚本加载到 excel sheet.
部分样本日期如下:
- 2017-02-09T09:33:33.508+1100
- 2017-05-19T13:59:36.735+1000
我想以 %d-%b-%Y(例如:2017 年 2 月 9 日)这样的格式呈现
我试过使用 python datetime.strptime
和 strftime
。
示例代码如下:
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
等值时,这会有所帮助。