我想将两个字符串列表转换为具有相同时间格式的列表。
这是我们的两个列表:
# 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'
但是我还是很困惑。我的方法可能有问题,但是我很难找到适合这种情况的方法。
答案 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")
然后,使用strftime
将struct_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)