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

Thi*_*ter 33 python date

我需要date在今年的第一天和最后一天获得对象.

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

from datetime import date
a = date(date.today().year, 1, 1)
b = date(date.today().year, 12, 31)
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 21

想到的唯一真正的改进是为变量提供比a和更具描述性的名称b.

  • 此外,无需调用today()两次,将其存储在变量中. (3认同)

Tre*_*ton 11

如果你碰巧在除夕夜这么晚跑步,并且接到两次today()跨年界限的电话,你会遇到一些奇怪的事情。这样做更安全:

from datetime import date

epoch_year = date.today().year
year_start = date(epoch_year, 1, 1)
year_end = date(epoch_year, 12, 31)
Run Code Online (Sandbox Code Playgroud)


Ibr*_*tov 10

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)
Run Code Online (Sandbox Code Playgroud)


dan*_*nio 6

python库中没有任何内容,但有外部库包含此功能.例如,pandas有一个时间序列库,您可以使用它来执行:

from datetime import date
from pandas.tseries import offsets

a = date.today() - offsets.YearBegin()
b = date.today() + offsets.YearEnd()
Run Code Online (Sandbox Code Playgroud)

虽然pandas是矫枉过正,如果你想要的是一年的开始和年末功能,它也有很多其他高层次的概念,如工作日,假期日历,月/季度/年的补偿支持:HTTP://pandas.pydata.组织/大熊猫-DOCS /稳定/ timeseries.html#dateoffset对象


oak*_*igh 5

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)
Run Code Online (Sandbox Code Playgroud)

如果我们想获得一年开始或结束的确切时间怎么办?一样。替换datetime.datedatetime.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))
Run Code Online (Sandbox Code Playgroud)

输出:

(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))
Run Code Online (Sandbox Code Playgroud)