【问题标题】:How can I convert the time in a datetime string from 24:00 to 00:00 in Python?如何在 Python 中将日期时间字符串中的时间从 24:00 转换为 00:00?
【发布时间】:2010-08-16 22:20:55
【问题描述】:

我有很多日期字符串,例如Mon, 16 Aug 2010 24:00:00,其中一些采用00-23 小时格式,其中一些采用01-24 小时格式。我想获取它们的日期对象列表,但是当我尝试将示例字符串转换为日期对象时,我必须将其从Mon, 16 Aug 2010 24:00:00 转换为Tue, 17 Aug 2010 00:00:00。最简单的方法是什么?

【问题讨论】:

    标签: python datetime


    【解决方案1】:
    import email.utils as eutils
    import time
    import datetime
    
    ntuple=eutils.parsedate('Mon, 16 Aug 2010 24:00:00')
    print(ntuple)
    # (2010, 8, 16, 24, 0, 0, 0, 1, -1)
    timestamp=time.mktime(ntuple)
    print(timestamp)
    # 1282017600.0
    date=datetime.datetime.fromtimestamp(timestamp)
    print(date)
    # 2010-08-17 00:00:00
    print(date.strftime('%a, %d %b %Y %H:%M:%S'))
    # Tue, 17 Aug 2010 00:00:00
    

    既然你说你有很多这些要修复,你应该定义一个函数:

    def standardize_date(date_str):
        ntuple=eutils.parsedate(date_str)
        timestamp=time.mktime(ntuple)
        date=datetime.datetime.fromtimestamp(timestamp)
        return date.strftime('%a, %d %b %Y %H:%M:%S')
    
    print(standardize_date('Mon, 16 Aug 2010 24:00:00'))
    # Tue, 17 Aug 2010 00:00:00
    

    【讨论】:

    • +1 因为直到现在我才知道email.utils.parsedate() 的存在而且学习很有趣!
    • 是的,我也在这里了解到email.utils.parsedate... :)
    • 不确定文件是否带有闰秒的时间戳,但一天最多可以有 86402 秒(尽管在需要时通常只有 86401 秒)。 (时间可以去Mon, 16 Aug 24:00:01Tue, 17 Aug 00:00:00
    • 抛开闰秒,24:00:00 是一个完全可以接受的时间戳(ISO 8601 [2004], §4.2.3: ‘Midnight’)并且广泛用于数据记录。这意味着一天结束时的最后一条记录仍被标记为属于该天。它可以防止聚合函数中的错误。
    猜你喜欢
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    相关资源
    最近更新 更多