【问题标题】:Python custom datetime(?) format handlingPython自定义日期时间(?)格式处理
【发布时间】:2015-05-11 21:18:19
【问题描述】:

假设我有一个字符串,表示带有星期几的时间:

例如“52300”,表示一周中的第 5 天(星期五),23 小时 00 分。

如何将其解析为时间或日期时间对象以添加 timedelta(hours=3) 并将其恢复为这种奇怪的格式?预期输出为“60200”字符串。

我试过了:

tow_str = '52300'
tow = datetime.datetime.strptime(tow_str, "%w%H%M") + datetime.timedelta(hours=3)
print(tow.strftime("%w%H%M"))

返回“20200”而不是“60200”

【问题讨论】:

    标签: python date datetime time strptime


    【解决方案1】:

    使用%w 准确解析日期要求您包含日期本身,否则日期设置为 1900-01-01:

    >>> import datetime
    >>> tow_str = '52300'
    >>> datetime.datetime.strptime(tow_str, "%w%H%M")
    datetime.datetime(1900, 1, 1, 23, 0)
    

    当格​​式化回字符串时,你总是以1结尾:

    >>> datetime.datetime.strptime(tow_str, "%w%H%M").strftime("%w%H%M")
    '12300'
    

    没有日期,%w 毫无意义。

    您可以根据今天的日期从工作日生成日期,并且只解析时间:

    def nearest_date_for_weekday(weekday):
        today = datetime.date.today()
        return today + datetime.timedelta(days=weekday - today.weekday())
    
    parsed_date = datetime.datetime.combine(
        nearest_date_for_weekday(int(tow_str[0])), 
        datetime.datetime.strptime(tow_str[1:], '%H%M').time())
    
    print parsed_date.strftime('%w%H%M')
    

    所以这会产生一个完整的datetime 对象,因此格式化回字符串会为%w 提供一个有意义的值。

    【讨论】:

    • 非常感谢!像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多