получить Unix время от вчерашнего 0000 часов до сегодняшнего 0000 часов с использованием Python - PullRequest
2 голосов
/ 05 февраля 2012

Мне нужно получить следующие значения

Today = 6th Feb
time 1 = 5th Feb 0000 hrs
time 2 = 6th Feb 0000 hrs.

Так что у меня есть 24 часа в эпоху времени.Ссылка есть сегодня, но не сейчас ()

Пока что у меня есть это.

yesterday = datetime.date.today() - datetime.timedelta(days=1)
epoch_yesterday =  time.mktime(yesterday.timetuple())
epoch_today = time.mktime(datetime.date.today().timetuple())

Оба значения epoch_ фактически возвращают секунды с этого момента () как 1600 часов (зависит от того, когда я бегусценарий) не с 0000/2400 часов.Я понимаю, что было бы лучше получить время вчерашней эпохи, а затем объявить 24 часа, чтобы узнать дату окончания.Но мне нужно, чтобы первая часть была правильной :), может быть, мне нужен сон?

ps Извините, стилизация кода не работает, SO не позволил мне опубликовать со стилем кода и был очень расстроен, чтобы получить SOопубликуйте это.

1 Ответ

2 голосов
/ 05 февраля 2012

Более простым способом может быть явное построение даты следующим образом:

now = datetime.now()
previous_midnight = datetime.datetime( now.year, now.month, now.day )

Это даст вам метку времени для только что прошедшей полуночи.Как вы уже знаете, time.mktime даст вам ваше значение эпохи.Просто добавьте или вычтите 24 * 60 * 60, чтобы получить предыдущую или следующую полночь оттуда.

О!И имейте в виду, что эпохальным значением будут секунды с полуночи 1970 года, 1 января UTC .Если вам нужны секунды с полуночи в вашем часовом поясе, не забудьте изменить их соответствующим образом!

Обновление : тестовый код, выполненный из оболочки незадолго до 13:00, PST:

>>> from datetime import datetime
>>> import time
>>> time_now = datetime.now()
>>> time_at_start_of_today_local = datetime( n.year, n.month, n.day )
>>> epochal_time_now = time.mktime( time_now.timetuple() )
>>> epochal_time_at_start_of_today_local = time.mktime( time_at_start_of_today.timetuple() )
>>> hours_since_start_of_day_today = (epochal_time_at_start_of_today_local - epochal_time_now) / 60 / 60
12.975833333333332

Примечание: time_at_start_of_today_local - это количество секунд между 1 января 1970 года, полуночью и началом текущего дня в вашем часовом поясе .Если вы хотите указать количество секунд до начала текущего дня в UTC, то вычтите ваш часовой пояс из time_at_start_of_today_local:

>>> time_at_start_of_today_utc = time_at_start_of_today_local - time.timezone

Имейте в виду, что вы попадаете в странную территорию, особенно, какой день вас волнуетоколо?Если сейчас в вашем часовом поясе вторник, но все еще понедельник в UTC, какую полночь вы считаете сегодняшней полночью для ваших целей?

...