检查月份中的某一天是否在两个月之间
check if day of month is between two months
我想检查 (month,day)
是否在两个月之间 ,而不考虑年份 。我在为 1 月 月份建模时遇到问题。我试着在 13 号之前代表 1 月,但我卡住了。
return 值
- 3 = 6 月 25 日至 8 月 22 日之间
- 2 = 在 01APR-24JUN 或 22AUG-31OCT 或 17DEC-01JAN 之间
- 1 = 在 01SEP-31MAR 或 01NOV-16DEC 或 02JAN-31MAR 之间
- 0 = 我的程序不工作,找不到日期。我完蛋了
源代码
from datetime import date, datetime, timedelta
def get_season(date):
month = date.month
day = date.day
if month == 1:
month = 13
if (6,25) <= (month, day) <= (8,22):
return 3
elif (4, 1) <= (month, day) <= (6,24) or (8, 22) < (month, day) <= (10, 31) or (12,17) <= (month, day) <= (13,1):
return 2
elif (9, 1) <= (month, day) <= (3, 31) or (11,1) <= (month, day) <= (12, 16) or (13,2) <= (month, day) <= (3, 31):
return 1
else:
return 0
if __name__ == "__main__":
date = datetime.strptime("2016-02-01",'%Y-%m-%d').date()
if get_season(date) == 0:
print "WRONG DOES NOT EXIST THERE!!!!!!!!!!!!!!"
我会直接在 datetime.date
个对象之间进行所有这些比较,然后将它们重写为一年。
from datetime import date
def get_season(d):
d = date(year=1900, month=d.month, day=d.day)
if date(1900, 6, 25) <= d <= date(1900, 8, 22):
return 3
elif date(1900, 4, 1) <= d <= date(1900, 6, 24) or \
date(1900, 8, 22) <= d <= date(1900, 10, 31) or \
date(1900, 12, 17) <= d <= date(1900 12, 31) or \
date(1900, 1, 1) == d:
return 2
elif date(1900, 9, 1) <= d <= date(1900, 3, 31) or \
date(1900, 11, 1) <= d <= date(1900, 12, 16) or \
date(1900, 1, 2) <= d <= date(1900, 3, 31):
return 1
这也使得创建边界对变得更加容易。
def get_season(d):
d = date(year=1900, month=d.month, day=d.day)
boundarydict = {1: [(date(1900, 9, 1), date(1900, 3, 31)),
(date(1900, 11, 1), date(1900, 12, 16)),
(date(1900, 1, 2), date(1900, 3, 31))],
2: [(date(1900, 4, 1), date(1900, 6, 24)),
(date(1900, 8, 22), date(1900, 10, 31)),
(date(1900, 12, 17), date(1900, 12, 31)),
(date(1900, 1, 1), date(1900, 1, 1))], # note this one!
3: [(date(1900, 6, 25), date(1900, 8, 22))]}
for retval, boundaries in boundarydict.values():
if any(a <= d <= b for a, b in boundaries):
return retval
我想检查 (month,day)
是否在两个月之间 ,而不考虑年份 。我在为 1 月 月份建模时遇到问题。我试着在 13 号之前代表 1 月,但我卡住了。
return 值
- 3 = 6 月 25 日至 8 月 22 日之间
- 2 = 在 01APR-24JUN 或 22AUG-31OCT 或 17DEC-01JAN 之间
- 1 = 在 01SEP-31MAR 或 01NOV-16DEC 或 02JAN-31MAR 之间
- 0 = 我的程序不工作,找不到日期。我完蛋了
源代码
from datetime import date, datetime, timedelta
def get_season(date):
month = date.month
day = date.day
if month == 1:
month = 13
if (6,25) <= (month, day) <= (8,22):
return 3
elif (4, 1) <= (month, day) <= (6,24) or (8, 22) < (month, day) <= (10, 31) or (12,17) <= (month, day) <= (13,1):
return 2
elif (9, 1) <= (month, day) <= (3, 31) or (11,1) <= (month, day) <= (12, 16) or (13,2) <= (month, day) <= (3, 31):
return 1
else:
return 0
if __name__ == "__main__":
date = datetime.strptime("2016-02-01",'%Y-%m-%d').date()
if get_season(date) == 0:
print "WRONG DOES NOT EXIST THERE!!!!!!!!!!!!!!"
我会直接在 datetime.date
个对象之间进行所有这些比较,然后将它们重写为一年。
from datetime import date
def get_season(d):
d = date(year=1900, month=d.month, day=d.day)
if date(1900, 6, 25) <= d <= date(1900, 8, 22):
return 3
elif date(1900, 4, 1) <= d <= date(1900, 6, 24) or \
date(1900, 8, 22) <= d <= date(1900, 10, 31) or \
date(1900, 12, 17) <= d <= date(1900 12, 31) or \
date(1900, 1, 1) == d:
return 2
elif date(1900, 9, 1) <= d <= date(1900, 3, 31) or \
date(1900, 11, 1) <= d <= date(1900, 12, 16) or \
date(1900, 1, 2) <= d <= date(1900, 3, 31):
return 1
这也使得创建边界对变得更加容易。
def get_season(d):
d = date(year=1900, month=d.month, day=d.day)
boundarydict = {1: [(date(1900, 9, 1), date(1900, 3, 31)),
(date(1900, 11, 1), date(1900, 12, 16)),
(date(1900, 1, 2), date(1900, 3, 31))],
2: [(date(1900, 4, 1), date(1900, 6, 24)),
(date(1900, 8, 22), date(1900, 10, 31)),
(date(1900, 12, 17), date(1900, 12, 31)),
(date(1900, 1, 1), date(1900, 1, 1))], # note this one!
3: [(date(1900, 6, 25), date(1900, 8, 22))]}
for retval, boundaries in boundarydict.values():
if any(a <= d <= b for a, b in boundaries):
return retval