代码之家  ›  专栏  ›  技术社区  ›  Wes

以YYYYMMDD/HHMMSS格式将日期/时间转换为python日期时间

  •  18
  • Wes  · 技术社区  · 14 年前

    我在列表中的第4和第5个元素中有一个YYYYMMDD格式的日期和一个HHMMSS格式的时间作为字符串。即。:

    data[4] = '20100304'
    data[5] = '082835'
    

    我正在创建一个datetime实例(在名为generates的字段中),如下所示:

    generatedtime = datetime.datetime(int(data[4][:4]),int(data[4][4:6]),int(data[4][6:]),int(data[5][:2]),int(data[5][2:4]),int(data[5][4:6]))
    

    鉴于输入格式无法更改,是否有更清晰的方法可以创建datetime对象的实例?

    4 回复  |  直到 14 年前
        1
  •  40
  •   unutbu    14 年前

    不需要导入 time ; datetime.datetime.strptime 自己能做到。

    import datetime
    dt=datetime.datetime.strptime(data[4]+data[5],'%Y%m%d%H%M%S')
    print(dt)
    # 2010-03-04 08:28:35
    

    有关格式代码的信息(例如 %Y%m%d%H%M%S )可用,请参见 docs 对于 strftime .

        2
  •  4
  •   Mark Biek    14 年前

    你可以看看 time.strptime .

    import time
    time.strptime('20100304 082835', '%Y%m%d %H%M%S')
    

    以上假设为24小时制。( %H )使用 %I 如果使用12小时的时钟。

    有关可用格式指令的完整列表,请查看 time.strftime

        3
  •  0
  •   gruszczy    14 年前
    import time, datetime
    
    x = time.strptime("30 Nov 00", "%d %b %y")
    datetime.datetime(x)
    

    您还可以提供自己的日期字符串格式,如下所示 doc .

        4
  •  0
  •   Seth Johnson    14 年前

    您可以使用生成器(相当于映射)清理现有代码:

    generatedtime = datetime.datetime( *(int(x) for x in
       (data[4][:4], data[4][4:6], data[4][6:], data[5][:2], data[5][2:4],data[5][4:6])
       ) )
    

    或者,即使你像狐狸一样疯狂,你也可以使datetime语句更清晰(以增加一行荒谬的行为代价):

    slices = ( (4, slice(4)), (4, slice(4,6) ), (4, slice(6,None)), (5, slice(2) ), (5, slice(2,4) ), (5, slice(4,6)) )
    generatedtime = datetime.datetime( *(int(data[i][s]) for (i,s) in slices) )