Преобразуйте год/Месяц/Повседневный года в Python

Я использую модуль даты и времени 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" вычислить день года. Какие-либо идеи/предложения?

117
задан gary 14 October 2019 в 15:31
поделиться

0 ответов

Существует очень простое решение:

from datetime import datetime
day_of_year = datetime.now().timetuple().tm_yday
231
ответ дан DzinX 24 November 2019 в 02:05
поделиться

Разве Вы не могли использовать strftime ?

>>> import datetime
>>> today = datetime.datetime.now()
>>> print today
2009-03-06 15:37:02.484000
>>> today.strftime('%j')
'065'

Редактирование

, Как отмечено в комментариях, если бы Вы хотите сделать сравнения или вычисления с этим числом, необходимо было бы преобразовать его в int() потому что strftime() возвраты строка. Если это так, Вы - более обеспеченное использование DzinX ответ.

36
ответ дан Community 24 November 2019 в 02:05
поделиться

Просто вычтите 1 января из даты:

import datetime
today = datetime.datetime.now()
day_of_year = (today - datetime.datetime(today.year, 1, 1)).days + 1
5
ответ дан zweiterlinde 24 November 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: