确定较大的月份,忽略日期

Determine larger month, ignoring the day

我可以在 python 中编写什么函数来确定 f 的日期是否大于 t,忽略日期部分 - 它显然是?

t = datetime.date(2014, 12, 30)
f = datetime.date(2015, 1 ,2)

我尝试了以下方法:

if t.month > f.month:

但是,这不起作用,因为它没有考虑年份。我只想使用年份和月份 - 而不是日期。

请注意 't' 也可能是 datetime.datetime(2015, 2, 2)

呃...直接比较日期有什么问题吗?

>>> import datetime
>>> t = datetime.date(2014, 12, 30)
>>> f = datetime.date(2015, 1 ,2)
>>> t > f
False
>>> t < f
True
>>> 

现在如果要比较同年同月的两个日期是否相等,只需比较年月:

>>> t.strftime("%Y%m") <= f.strftime("%Y%m")
True
>>> g = datetime.date(2015, 1, 5)
>>> g.strftime("%Y%m") > f.strftime("%Y%m")
False
>>> g.strftime("%Y%m") == f.strftime("%Y%m")
True

更简单(成本更低):

>>> (t.year, t.month) <= (f.year, f.month)
True
>>> (g.year, g.month) == (f.year, f.month)
True
from datetime import datetime

t = datetime(2014, 12, 30)
f = datetime(2015, 1 ,2)

print t<f

您可以将 day 组件设置为 1 的日期进行比较:

t.replace(day=1) < f.replace(day=1)

或者比较年份和月份:

if t.year < f.year or (t.year == f.year and t.month < f.month):

后者更容易通过元组比较进行测试:

if (t.year, t.month) < (f.year, f.month):

演示:

>>> from datetime import date
>>> t = date(2015, 1, 2)
>>> f = date(2015, 2, 2)
>>> t.replace(day=1) < f.replace(day=1)
True
>>> t.year < f.year or (t.year == f.year and t.month < f.month)
True
>>> (t.year, t.month) < (f.year, f.month)
True
>>> t = date(2014, 12, 30)
>>> f = date(2015, 1, 2)
>>> t.replace(day=1) < f.replace(day=1)
True
>>> t.year < f.year or (t.year == f.year and t.month < f.month)
True
>>> (t.year, t.month) < (f.year, f.month)
True