【问题标题】:Which method to convert strings in a UTC format into day-month-year string?哪种方法可以将 UTC 格式的字符串转换为日-月-年字符串?
【发布时间】:2025-12-29 23:10:07
【问题描述】:

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

这是我们的两个列表:

# 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

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

【问题讨论】:

    标签: python python-3.x datetime time


    【解决方案1】:

    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】:

      这样就可以了

      
      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

      【讨论】:

      • [parser.parse(x).date().isoformat() for x in firstlist] 更短。 list(map(... 在我看来太冗长了。
      【解决方案3】:

      您可以使用 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)
      

      【讨论】: