我需要在当年的第一天和最后一天获得date
个对象。
目前我正在使用这个可以正常运行的代码,但我很好奇是否有更好的方法可以做到这一点;例如无需手动指定月/日。
from datetime import date
a = date(date.today().year, 1, 1)
b = date(date.today().year, 12, 31)
答案 0 :(得分:18)
我们想到的唯一真正的改进是为您的变量提供比a
和b
更具描述性的名称。
答案 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))