Python 自定义日期时间(?)格式处理
Python custom datetime(?) format handling
假设我有一个字符串表示一个星期几:
例如'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"))
哪个 returns '20200' 而不是 '60200'
准确地解析带有 %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
提供有意义的值。
假设我有一个字符串表示一个星期几:
例如'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"))
哪个 returns '20200' 而不是 '60200'
准确地解析带有 %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
提供有意义的值。