Date object with year and month only

2020-02-26 14:47发布

Is it possible to create date object with year and month only? I don't need day.

In [5]: from datetime import date

In [6]: date(year=2013, month=1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-a84d4034b10c> in <module>()
----> 1 date(year=2013, month=1)

TypeError: Required argument 'day' (pos 3) not found

I'm using the date object as key in my dictionary and January 20 must have the same key as January 21, because they are in same month and year.

I used a simple integer before that as a month number. Unfortunately I need to know the year too!

4条回答
太酷不给撩
2楼-- · 2020-02-26 15:29

If you want to use datetime, you must follow its attributes. Here I quote it from the official website:

"An idealized naive date, assuming the current Gregorian calendar always was, and always will be, in effect. Attributes: year, month, and day."

So, you can't ignore day and remember to give assignment.

查看更多
祖国的老花朵
3楼-- · 2020-02-26 15:31

No, you can't do that. For your usecase, use a tuple instead:

key = (2013, 1)

Since you don't need to do date manipulations on the value a tuple more than suffices.

查看更多
看我几分像从前
4楼-- · 2020-02-26 15:37
import datetime

date = datetime.date(year=2013, month=1, day=4)
str(date.year) + '-' + str(date.month)
查看更多
一夜七次
5楼-- · 2020-02-26 15:47

As an addition to other answer, you can use namedtuple.

from collections import namedtuple
MyDate = namedtuple('MyDate', ['month', 'year'])
dkey = MyDate(year=2013, month=1)
查看更多
登录 后发表回答