Получить объект даты в течение первого/последнего дня текущего года

Мне нужно получить объекты date для первого и последнего дня в текущем году.

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

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

Ответ 1

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

Ответ 2

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

from datetime import date
from pandas.tseries import offsets

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

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

Ответ 3

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)

Ответ 4

Вы будете иметь дело с какой-то забавной вещью, если вам случится так поздно в канун Нового года, и два вызова today() пересекают границу года. Это безопаснее сделать:

from datetime import date

epoch_year = date.today().year
year_start = date(epoch_year, 1, 1)
year_end = date(epoch_year, 12, 31)