【问题标题】:Python, strptime is skipping zeros in the millisecond sectionPython,strptime 在毫秒部分跳过零
【发布时间】:2015-06-24 12:31:52
【问题描述】:

我想从字符串中提取时间戳,但是毫秒部分没有被正确读取

datetime.strptime('20130629110924095','%Y%m%d%H%M%S%f')

产生以下输出

datetime.datetime(2013, 6, 29, 11, 9, 24, 95000)

而不是

datetime.datetime(2013, 6, 29, 11, 9, 24, 95)

要清楚:95 毫秒

我做错了什么?

【问题讨论】:

  • 我尝试用零填充,但它没有帮助 datetime.strptime('20130629110924.095000','%Y%m%d%H%M%S.%f')
  • %f 解析微秒。 95000 微秒等于 95 毫秒。所以strptime 已经在正确解析你的字符串了。
  • 对不起。当我在 MS Excel 中编辑文件时发生错误。它从源文件中删除了所有尾随零!没想到会这样!

标签: python datetime timestamp strptime


【解决方案1】:

documentation 说:

%f 是对 C 标准中格式字符集的扩展(但在日期时间对象中单独实现,因此始终可用)。当与 strptime() 方法一起使用时,%f 指令接受 1 到 6 位数字和右侧的零填充。

所以你得到的结果是预期的行为,你的'095'被填充到'095000'。

【讨论】:

  • 谢谢!那么,我应该输入什么才能获得 95 毫秒的输出?从文件中读取数据,该文件以“20130629 1109240 095”“20130629 1109240 195”等格式写入。
【解决方案2】:

微秒由六位数字组成。 95 毫秒 = 95000 微秒。 所以要获得像datetime.datetime(2013, 6, 29, 11, 9, 24, 95000)这样的95毫秒的日期时间:

datetime.strptime('20130629110924095000','%Y%m%d%H%M%S%f')

【讨论】:

  • 谢谢你的回答,但第一个代码也输出 datetime.datetime(2013, 6, 29, 11, 9, 24, 9500) 我期待的答案是 datetime.datetime(2013 , 6, 29, 11, 9, 24, 95) 我会纠正关于第二个 sn-p 的问题
  • 我明白了。但是, datetime.strptime('20130629110924000095','%Y%m%d%H%M%S%f') 给了我 95 微秒,而不是 95 毫秒。
  • 解决了!谢谢,问题出在源文件中!
【解决方案3】:

95000 以微秒为单位,相当于 95 毫秒,即,如果您想获得 95 毫秒,输入 ('095') 已经正确。

下面是相同的输入,但为了便于阅读,添加了一些额外的格式:

>>> from datetime import datetime
>>> datetime.strptime('2013-06-29 11:09:24.095','%Y-%m-%d %H:%M:%S.%f')
datetime.datetime(2013, 6, 29, 11, 9, 24, 95000)

毫秒是0.001 秒,因此95 毫秒是0.095 秒,这就是为什么095 是解析秒小数部分的%f 的正确输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多