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

Python 确定较大的月份,忽略日期,python,date,datetime,python-datetime,Python,Date,Datetime,Python Datetime,我可以用python编写什么函数来确定f的日期是否大于t,而忽略day组件——显然是这样的 t = datetime.date(2014, 12, 30) f = datetime.date(2015, 1 ,2) 我尝试了以下方法: if t.month > f.month: 但是,这不起作用,因为它没有考虑年份。我只想用年和月,而不是天 请注意,“t”也可以是datetime.datetime2015,2,2。。。直接比较日期有什么问题吗 >>> import d

我可以用python编写什么函数来确定f的日期是否大于t,而忽略day组件——显然是这样的

t = datetime.date(2014, 12, 30)
f = datetime.date(2015, 1 ,2)
我尝试了以下方法:

if t.month > f.month:
但是,这不起作用,因为它没有考虑年份。我只想用年和月,而不是天


请注意,“t”也可以是datetime.datetime2015,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

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

>>> 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

您可以将日期与日期组件设置为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):
演示:


您可以将日期与日期组件设置为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):
演示:


你比我快7秒。是的,因为date2014,1,2会比date2014,1,1大,但它们在同一个月。如果是那样的话,测试应该会失败。谢谢你的回答。我不想直接比较日期,因为我只想比较月份。我需要考虑年份的原因是,例如,2013年1月大于2014年12月。然而,如果只比较几个月,这将是错误的输出,即使它不是t@MartijnPieters:是的,我在发帖后理解了这一点,但谢谢你指出。你比我快了7秒。是的,因为date2014,1,2将比date2014,1,1大,但它们在同一个月。如果是那样的话,测试应该会失败。谢谢你的回答。我不想直接比较日期,因为我只想比较月份。我需要考虑年份的原因是,例如,2013年1月大于2014年12月。然而,如果只比较几个月,这将是错误的输出,即使它不是t@MartijnPieters:是的,我在发帖后理解了这一点-但感谢您指出。不,请使用datetime2014、12、30和datetime2014、12、31执行此操作。当OP想要使用日期对象时,为什么要使用datetime对象?除了datetime和date对象都不忽略日期这一事实之外,这些方法对于此类比较来说效果很好。对于datetime2014、12、30和datetime2014、12、31,不需要这样做。当OP想要使用日期对象时,为什么要使用datetime对象?除了datetime和date对象都不忽略日期这一事实之外,这些方法对于这样的比较非常有效。谢谢您的回复。然而,如果“不是”是“2015,2,2”,那么它就不起作用。@NorthernStars:与f的值相比,f的值是多少?如果“f”仍然是2015,1,2@NorthernStars:所有三种变体都适用于这些日期。你是怎么测试的?@NorthernStars:我可能被你的t.month>f.month测试搞糊涂了;仔细阅读你的问题,你想测试t在f之前,所以我颠倒了测试。谢谢你的回答。然而,如果“不是”是“2015,2,2”,那么它就不起作用。@NorthernStars:与f的值相比,f的值是多少?如果“f”仍然是2015,1,2@NorthernStars:所有三种变体都适用于这些日期。你是怎么测试的?@NorthernStars:我可能被你的t.month>f.month测试搞糊涂了;仔细阅读你的问题,你想测试t在f之前,所以我把测试颠倒了。