time.mktime возвращает одно и то же значение с другим вводом - PullRequest
0 голосов
/ 06 апреля 2020

У меня проблема с разными входами time.mktime Функция возвращает одно и то же значение. Разница только в дне недели, но все же.

beginning_of_the_meeting = []

S = 'Mon 01:00-23:00\nTue 01:00-23:00\nWed 01:00-23:00\nThu 01:00-23:00\nFri 01:00-23:00\nSat 01:00-23:00\nSun 01:00-21:00'

for meeting in iter(S.splitlines()):
    beginning_of_the_meeting.append(time.strptime(meeting[0:9] + ":2010", '%a %H:%M:%Y'))

for index in range(len(beginning_of_the_meeting)):
    print(time.mktime((beginning_of_the_meeting[index])))
    print(beginning_of_the_meeting[index])

и вывод его:

1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=1, tm_isdst=-1)
1262304000.0
time.struct_time(tm_year=2010, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=1, tm_isdst=-1)

1 Ответ

1 голос
/ 06 апреля 2020

strptime() не гарантирует, что вы получите действительное время / дату, он просто делает все возможное для разбора.

Когда вы анализируете частичную дату-время (день недели и время -day), вы получаете вырожденную дату-время назад - как видите, единственное, что изменяется в структуре, это поля wday, hour и min.

Это в сочетании с тем, что mktime() не использует wday (по крайней мере, на Linux, возможно, и в других местах):

Функция игнорирует значения, предоставленные вызывающей стороной в tm_wday и tm_yday поля.

приводит к тому, что вы видите; всегда один и тот же вывод, так как поля, фактически используемые mktime(), не меняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...