Python自定义日期时间(?)格式处理

时间:2015-03-10 12:24:34

标签: python date datetime time strptime

让我们说我有一个字符串代表一周中某天的时间:

例如' 52300',表示一周的第五天(星期五),即23小时00分。

如何将它解析为time或datetime对象以添加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'

1 个答案:

答案 0 :(得分:4)

准确地使用%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提供有意义的值。