哪种方法可以将UTC格式的字符串转换为日-月-年字符串?

时间:2019-04-30 23:01:44

标签: python python-3.x datetime time

我想将两个字符串列表转换为具有相同时间格式的列表。

这是我们的两个列表:

# first list: strings with UTC format
firstlist = ['2013-08-16T07:35:01Z','2012-11-17T17:07:49Z','2012-11-09T23:24:13Z']

# second list: strings with day-month-year format
secondlist = ['04-06-2016','31-10-2018','12-04-2019']

我想转换这两个列表,并为每个项目使用相同的格式year-month-day

['2013-08-16','2012-11-17','2012-11-09'] # expected for the first list
['2016-06-04','2018-10-31','2019-04-12'] # expected for the second list

我尝试了每个列表只有一项:

import time

time.strptime("2013-08-16T07:35:01Z", "%d %m %y")
time.strptime("04-06-2016", "%d %m %y")

但是我得到一个错误:

ValueError: time data '2013-08-16T07:35:01Z' does not match format '%d %m %y'

我找到了这两个文档:timedatetime

但是我还是很困惑。我的方法可能有问题,但是我很难找到适合这种情况的方法。

3 个答案:

答案 0 :(得分:2)

做到了


import dateutil.parser

firstlist = list (map (lambda x: str (dateutil.parser.parse (x).date()), firstlist))
secondlist = list (map (lambda x: str (dateutil.parser.parse (x).date()), secondlist))

使用dateutil.parser.parse转换为datetime

来源:here

答案 1 :(得分:2)

strptime返回一个struct_time object,并给出要解析的字符串。您需要指定实际输入字符串的日期/时间格式:

import time

# string to time struct
a = time.strptime("2013-08-16T07:35:01Z", "%Y-%m-%dT%H:%M:%SZ")
b = time.strptime("04-06-2016", "%d-%m-%Y")

然后,使用strftimestruct_time对象格式化为字符串:

# time struct to formatted string
a_formatted = time.strftime('%Y-%m-%d', a)
b_formatted = time.strftime('%Y-%m-%d', b)

print(a_formatted,b_formatted)

输出:

2013-08-16 2016-06-04

答案 2 :(得分:1)

您可以使用 dateutil 解析器来解析几乎任何时间格式。

import datetime
from dateutil.parser import parse


firstlist = ['2013-08-16T07:35:01Z','2012-11-17T17:07:49Z','2012-11-09T23:24:13Z']
secondlist = ['04-06-2016','31-10-2018','12-04-2019']

new_firstlist = [datetime.datetime.strftime(parse(dt), "%Y-%m-%d") for dt in firstlist]
new_secondlist = [datetime.datetime.strftime(parse(dt), "%Y-%m-%d") for dt in secondlist]

print(new_firstlist)
print(new_secondlist)