Вы можете использовать модули времени или даты и времени, но следует иметь в виду, что они всегда создают объект, который определяет момент времени. (Также при разборе строк рассмотрите возможность использования функции strptime и отображения в виде строки, соответственно функции strftime)
, например
>>> hours = time.strptime("23:59", "%H:%M")
>>> days = time.strptime("2018-01-04", "%Y-%m-%d")
>>> time.strftime("%H:%M", hours)
'23:59'
>>> time.strftime("%H:%M %Y", hours)
'23:59 1900'
Не рекомендуется, но если по какой-то причине вы хотите разделить эти два объекта и хотите позаботиться только о конкретной части вашего задания, вы все равно можете указать соответствующие номера с помощью
>>> hours.tm_hour
23
>>> hours.tm_min
59
>>> days.tm_mon
1
>>> days.tm_mday
4
>>> days.tm_year
2018
Гораздо лучшим подходом, на мой взгляд, было бы форматирование полной строки даты и использование strptime для формирования полной метки времени - даже если вы получаете время и дату как отдельные входные данные:
>>> ttime = "22:45"
>>> dday = "2018-01-04"
Вы можете использовать% formatter или "новые" python f-Strings
>>> complete_t_string = "{} {}".format(dday, ttime)
>>> complete_t_string
'2018-01-04 22:45'
Теперь, когда у нас есть полная строка, мы можем указать, как она должна читаться, и создать полную метку времени:
>>> complete_time = time.strptime(complete_t_string, "%Y-%m-%d %H:%M")
>>> complete_time
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=4, tm_hour=22, tm_min=45, tm_sec=0, tm_wday=3, tm_yday=4, tm_isdst=-1)
EDIT:
Кто-то, вероятно, убьет меня, но если вы абсолютно точно знаете, что вы получите только два типа значений, вы можете просто выполнить конструкцию try / кроме. Это, вероятно, можно написать более Pythonically:
try:
time.strptime(t_string, "%H:%M")
except ValueError:
time.strptime(t_string, "%Y-%m-%d")