Я использую модуль Python datetime , то есть:
>>> 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)
Они оба кажутся довольно неуклюжими, и у меня есть интуиция, что есть более «питонический» способ вычисления дня года. Есть идеи / предложения?
date.today()
а неdatetime.now()
работает и еще больше подчеркивает характер операции.time.localtime().tm_yday
не нужно преобразовывать datetime в timetuple, так как это дает localtime ().Не могли бы вы использовать
strftime
?редактировать
Как отмечено в комментариях, если вы хотите провести сравнение или вычисления с этим числом, вам придется преобразовать его в,
int()
потому чтоstrftime()
возвращает строку. Если это так, вам лучше использовать ответ DzinX .источник
Ответ DZinX - отличный ответ на вопрос. Я нашел этот вопрос, когда искал обратную функцию. Я обнаружил, что это работает:
Я не уверен в соблюдении этикета здесь, но я подумал, что указатель на обратную функцию может быть полезен другим, как я.
источник
Я хочу представить производительность различных подходов на Python 3.4, Linux x64. Выдержка из профилировщика строк:
Так что наиболее эффективным является
источник
Просто вычтите 1 января из даты:
источник
Если у вас есть причина избегать использования
datetime
модуля, эти функции будут работать.источник
Этот код принимает дату в качестве входного аргумента и возвращает день года.
источник