您可以使用 time 或 datetime 模块,但要记住一件事,它们总是创建一个对象,指定时间的某个时刻。 (另外,如果解析字符串,可以考虑使用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"
您可以使用 % 格式化程序,或“新的”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)
编辑:
有人可能会杀了我,但如果你绝对知道你只会得到两种类型的值,你可以做一个简单的 try / except 构造。它可能可以更 Python 地编写:
try:
time.strptime(t_string, "%H:%M")
except ValueError:
time.strptime(t_string, "%Y-%m-%d")