本帖最后由 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
|