本帖最后由 shigure_takimi 于 2017-12-8 08:44 编辑
- def isRunnian(year):
- return year%400==0 or (year%4==0 and year%100!=0)
- def getThatDay():
- for year in range(2017,1000,-1): #1988,1989,1990-1999,2000-2017都很显然不符合要求,本来可以不用循环的。
- daysOfYear = [31,29,31,30,31,30,31,31,30,31,30,31] if isRunnian(year) else\
- [31,28,31,30,31,30,31,31,30,31,30,31]
- for month in range(12,0,-1):
- for day in range(daysOfYear[month-1],0,-1):
- if len(set(str(year).zfill(4)+str(month).zfill(2)+str(day).zfill(2))) == 8:
- return str(year).zfill(4)+'-'+str(month).zfill(2)+'-'+str(day).zfill(2)
- print(getThatDay())
- ## >>>
- ## 1987-06-25
复制代码
- 改进了一下,可以求输入日期以前最后一个符合要求的日期
- def isRunnian(year):
- return year%400==0 or (year%4==0 and year%100!=0)
- def getThatDay(yearNow,monthNow,dayNow):
- for year in range(yearNow,1000,-1): #1988,1989,1990-1999,2000-2017都很显然不符合要求,本来可以不用循环的。
- daysOfYear = [31,29,31,30,31,30,31,31,30,31,30,31] if isRunnian(year) else\
- [31,28,31,30,31,30,31,31,30,31,30,31]
- for month in range(12,0,-1):
- for day in range(daysOfYear[month-1],0,-1):
- if len(set(str(year).zfill(4)+str(month).zfill(2)+str(day).zfill(2))) == 8 and\
- (year < yearNow or (year == yearNow and month < monthNow) or (year == yearNow and month == monthNow and day<=dayNow)):# 确保得到日期早于当日
- return str(year).zfill(4)+'-'+str(month).zfill(2)+'-'+str(day).zfill(2)
- print(getThatDay(2017,12,8))
- print(getThatDay(10000,12,31))
- print(getThatDay(1987,6,25))
- print(getThatDay(1900,12,31))
- ## >>>
- ## 1987-06-25
- ## 9876-12-30
- ## 1987-06-25
- ## 1897-06-25
复制代码
|