2011-03-24 3 views
15

Мне нужно получить date объектов за первый и последний день текущего года.Получить объект даты за первый/последний день текущего года

В настоящее время я использую этот код, который отлично работает, но мне любопытно, есть ли более хороший способ сделать это; например без необходимости вручную указывать месяц/день.

from datetime import date 
a = date(date.today().year, 1, 1) 
b = date(date.today().year, 12, 31) 
+1

Я не уверен, что я действительно классифицировать решение как вручную решение; на самом деле он намного яснее и, следовательно, «лучше», чем альтернативы, которые все связаны с арифметикой даты. –

+0

Я думаю, что это так «приятно», как вы собираетесь. Что именно вам не нравится в этом коде? – NPE

+0

На самом деле я просто хотел узнать, есть ли какая-то функция для получения, например. первый/последний день месяца, о котором я не слышал. – ThiefMaster

ответ

12

Единственное реальное улучшение, которое приходит на ум, чтобы дать переменные более описательные имена, чем a и b.

+0

Это были всего лишь примеры. Я использую эти два объекта даты в вызове функции. – ThiefMaster

+0

@ThiefMaster Достаточно честный. Я думаю, что это помогло бы получить хорошие ответы, если бы вы описали, что именно о вашем коде вы найдете inelegant. – NPE

+2

Кроме того, нет необходимости звонить сегодня() дважды, сохраните его в переменной. –

1

В библиотеке python ничего нет, но есть внешние библиотеки, которые обертывают эту функциональность. Например, pandas имеет библиотеку TimeSeries, с помощью которого вы можете сделать:

from datetime import date 
from pandas.tseries import offsets 

a = date.today() - offsets.YearBegin() 
b = date.today() + offsets.YearEnd() 

Хотя pandas является излишеством, если все, что вы хотите, год начала и конца года функциональность, он также имеет поддержку для многих других концепций высокого уровня такие как рабочие дни, праздничные календари, месяц/квартал/год зачеты: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects

1
from datetime import datetime 

starting_day_of_current_year = datetime.now().date().replace(month=1, day=1)  
ending_day_of_current_year = datetime.now().date().replace(month=12, day=31) 
+0

Некоторый контекст или объяснение могут помочь тем, кто ищет это решение в будущем. – Toby

Смежные вопросы