2015-03-10 7 views
0

Допустим у меня есть строка, представляющая время с номером дня недели:Python пользовательских даты и времени обработки формата

Например, «52300», что означает 5-й день недели (пятница), 23 часов 00 минут.

Как разобрать его на время или объект datetime, чтобы добавить timedelta (часы = 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»

ответ

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 ,

+0

спасибо! Работает как шарм. – demergy

Смежные вопросы