Я использую модуль даты и времени Python, т.е.:
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 13:24:58.857946
и я хотел бы вычислить день года, который чувствителен из високосных годов. например, сегодня (6 марта 2009) 65-й день 2009. Вот веб-калькулятор DateTime.
Так или иначе я вижу два опции:
A. Создайте массив number_of_days_in_month = [31, 28...], решите, является ли это високосный год, вручную подведите итог дней.
B. Использовать datetime.timedelta
высказывать предположение и затем двоичный поиск в течение корректного дня года:
>>> import datetime
>>> YEAR = 2009
>>> DAY_OF_YEAR = 62
>>> d = datetime.date(YEAR, 1, 1) + datetime.timedelta(DAY_OF_YEAR - 1)
Они оба чувствуют себя довольно неуклюжими, и у меня есть инстинктивное чувство, что существует больше способа "Pythonic" вычислить день года. Какие-либо идеи/предложения?
Существует очень простое решение:
from datetime import datetime
day_of_year = datetime.now().timetuple().tm_yday
Разве Вы не могли использовать strftime
?
>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 15:37:02.484000
>>> today.strftime('%j')
'065'
, Как отмечено в комментариях, если бы Вы хотите сделать сравнения или вычисления с этим числом, необходимо было бы преобразовать его в int()
потому что strftime()
возвраты строка. Если это так, Вы - более обеспеченное использование DzinX ответ.
Просто вычтите 1 января из даты:
import datetime
today = datetime.datetime.now()
day_of_year = (today - datetime.datetime(today.year, 1, 1)).days + 1