获取当年第一天/最后一天的日期对象

时间:2011-03-24 10:28:18

标签: python date

我需要在当年的第一天和最后一天获得date个对象。

目前我正在使用这个可以正常运行的代码,但我很好奇是否有更好的方法可以做到这一点;例如无需手动指定月/日。

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

5 个答案:

答案 0 :(得分:18)

我们想到的唯一真正的改进是为您的变量提供比ab更具描述性的名称。

答案 1 :(得分:6)

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/pandas-docs/stable/timeseries.html#dateoffset-objects

答案 2 :(得分: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)

答案 3 :(得分:0)

如果您恰好在除夕晚间进行了这项活动,并且对today()的两次致电都跨越了年限,那么您将会遇到一些时髦的事情。这样做更安全:

from datetime import date

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

答案 4 :(得分:0)

import datetime
year = 2016
first_day_of_year = datetime.date.min.replace(year = year)
last_day_of_year = datetime.date.max.replace(year = year)
print(first_day_of_year, last_day_of_year)

呃。

如果我们想获得一年开始或结束的确切时间怎么办?一样。将 datetime.date 替换为 datetime.datetime,这样就可以得到 datetime.datetime 格式的一年中的最后一天。

为了让这更有趣,将整个事情包装在一个函数中:

import datetime

def year_range(year, datetime_o = datetime.date):
    return (
        datetime_o.min.replace(year = year),
        datetime_o.max.replace(year = year)        
    )

print(year_range(2016, datetime.date))
print(year_range(2016, datetime.datetime))

输出:

(datetime.date(2016, 1, 1), datetime.date(2016, 12, 31))
(datetime.datetime(2016, 1, 1, 0, 0), datetime.datetime(2016, 12, 31, 23, 59, 59, 999999))