【问题标题】:Converting date/time in YYYYMMDD/HHMMSS format to Python datetime将 YYYYMMDD/HHMMSS 格式的日期/时间转换为 Python 日期时间
【发布时间】:2011-01-23 17:07:54
【问题描述】:

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

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

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

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 对象实例?

【问题讨论】:

  • 您的代码虽然看起来很别扭,但可以很好地完成工作。

标签: python datetime


【解决方案1】:

你可以看看time.strptime

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

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

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

【讨论】:

    【解决方案2】:

    无需导入timedatetime.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

    【讨论】:

    • 如果没有指定时间戳,时间将被视为本地时间。以下示例将 UTC 时间转换为 Unix 时间戳:datetime.datetime.strptime(timeval, "%Y%m%d%H%M%S").replace(tzinfo=datetime.timezone.utc).timestamp()(我实际上使用它来解析 FTP MDTM 响应)
    【解决方案3】:

    您可以使用生成器(相当于地图)稍微清理现有代码:

    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) )
    

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 2012-02-18
      • 1970-01-01
      • 2017-12-09
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      相关资源
      最近更新 更多