用的笨方法,验证过,没问题
def is_leap_year(year):
if year%400 == 0 or (year%4 ==0 and year%100!=0):
return True
else:
return False
def num_daysOfmonth(year,month):
l1=
if month in l1:
return 31
else:
if month == 2:
if is_leap_year(year):
return 29
else:
return 28
else:return 30
def days_ruzhi():
currentDate = raw_input("请输入今天的日期(eg:2017-11-13):")
ruzhiDate = '2014-8-18'
curList = currentDate.split('-')
ruzhiList = ruzhiDate.split('-')
curList = map(int,curList) #将一个list元素转变为整型
ruzhiList = map(int,ruzhiList)
total_days = 0
#print curList,ruzhiList
#当前日期和入职日期在同一年
if curList - ruzhiList == 0:
if curList - ruzhiList == 0:
total_days = curList - ruzhiList + 1
else:
for month in range(ruzhiList, curList):
if month > curList:
total_days += num_daysOfmonth(ruzhiList, month)
else:total_days += num_daysOfmonth(ruzhiList, month) - ruzhiList + 1
total_days += curList
print "您好,今天是您入职第%d天"%total_days
sys.exit(0)
#入职第三年及以后
if curList - ruzhiList > 1:
for year in range(ruzhiList+1,curList):
if is_leap_year(year):
total_days += 366
else:total_days += 365
print "test1:", total_days
#入职=1年
for month_ruzhi in range(ruzhiList, 13):
if month_ruzhi > ruzhiList:
total_days += num_daysOfmonth(ruzhiList, month_ruzhi)
else:
total_days += num_daysOfmonth(ruzhiList, month_ruzhi) - ruzhiList + 1
print "test3:", total_days
for month_curr in range(1, curList+1):
if month_curr == curList:
total_days += curList
else:
total_days += num_daysOfmonth(curList, month_curr)
print "您好,今天是您入职第%d天" % total_days
余欲渔 发表于 2017-4-11 11:29
我是先算年,再是月,最后算日,分别加入入职天数
你这个有点问题:当天2016-2-28,入职天数是560,你这个运行之后是558.{:5_92:} 本帖最后由 shigure_takimi 于 2017-12-4 10:18 编辑
def isRunnian(year):
return (year%4==0 and year%100!=0) or year%400 == 0
daysOfPingnain =
daysOfRunnian =
def getDay(year1, month1, date1, year2, month2, date2):
days1 = days2 = 0
if year2 < year1 or (year2 == year1 and month2 < month1) or (year2 == year1 and month2 == month1 and date2 < date1):
return '当前时间应不能早于入职时间!'
else:
days1 = sum(daysOfRunnian[:month1])+date1 if isRunnian(year1) else sum(daysOfPingnain[:month1])+date1
for year in range(year1, year2):
days2 += 366 if isRunnian(year) else 365
days2 += sum(daysOfRunnian[:month2])+date2 if isRunnian(year2) else sum(daysOfPingnain[:month2])+date2
return '入职第{}天!'.format(days2-days1+1)
print(getDay(2014,8,18,2014,8,19))
print(getDay(2014,8,11,2017,12,4))
## >>>
## 入职第2天!
## 入职第1212天!
def func(n):
if (n % 400 == 0) or (n % 100 != 0 and n % 4 == 0):
return True
else:
return False
def func1(i, k):
count = 0
for i in range(i+1, k+1):
if func(i):
count += 1
return count
a = {'year':2014, 'month':8, 'day':18}
b =
year = int(raw_input('Please enter a year: '))
month = int(raw_input('Please enter a month: '))
day = int(raw_input('Please enter a day: '))
if month == a['month'] and day == a['day']:
c = func1(a['year'], year)
total = 366 * c + 365 * (year - a['year'] - c)
print total
elif month >= a['month']:
if day >= a['day']:
c = func1(a['year'], year)
total = 366*c+365*(year-a['year']-c)+sum(b:month+1])+day-a['day']
print total
else:
c = func1(a['year'], year)
total = 366*c+365*(year-a['year']-c)+sum(b+1:month])+day+b-1] - a['day']
print total
elif month < a['month']:
c = func1(a['year'], year-1)
total = 366 * c + 365 * (year - a['year'] - c - 1) + sum(b+1:]) +sum(b[:month]) + b-1] - a['day'] + day
print total 冬雪雪冬 发表于 2017-4-10 00:00
先判断闰年,再计算是一年的第几天。
厉害厉害
def fun(yy,mm,dd,YY,MM,DD):
a =
l =
a = 29 if YY%4==0 or YY%400==0 and YY%100!=0 else 28
b = sum(l)+sum(a[:MM-1])+DD
a = 29 if YY%4==0 or YY%400==0 and YY%100!=0 else 28
b = b+sum(a)-18
return b
if __name__=="__main__":
print(fun(2014,8,18,2017,4,19)) 我的结果是1006天,对吗? 冬雪雪冬 发表于 2017-4-10 00:00
先判断闰年,再计算是一年的第几天。
膜拜一下 moc 发表于 2018-3-10 14:53
我的结果是1006天,对吗?
结果是975 本帖最后由 victor.xu 于 2018-3-12 10:31 编辑
def leap(n):
if (n % 4 == 0 and n % 100 != 0) or (n % 400 == 0):
return 1
else:
return 0
print('时间格式:YYYY-MM-DD')
print('入职时间:2014-08-18')
Y = 2014
M = 8
D = 18
Date = input('请输入当前日期:\n')
Sum = 0
day =
lis_Date = Date.split('-')
Year = int(lis_Date)
Month = int(lis_Date)
Day = int(lis_Date)
Flag_Leap = []
for i in range(2014, Year + 1):
Flag_Leap.append(leap(i))
for j in range(2015, Year):
Sum = Sum + 365 + Flag_Leap
if Month >2:
Sum_T = sum(day[:Month - 1]) + Flag_Leap[-1] + Day
else:
Sum_T = sum(day[: Month - 1]) + Day
Sum_E = sum(day) + day - D + 1
Sum = Sum + Sum_T + Sum_E
print('当前日期为:%s' % Date)
print('入职第%d天-小陆' % Sum)
我的结果是976天 Agoni 发表于 2018-3-10 22:00
结果是975
我算的是976天呢?包含了入职当天和当前2017-04-19这一天。 看不懂
先把自己的笨办法贴上,然后来学习大佬的优秀方案~~另外有谁能教我一下怎么用代码模式发代码啊····
year = 2014
month = 8
day =18
def caculatedays(years,months,days):
days1=
days2=
pastdays = 0
for i in range(1000,years):
if (i%4==0 and i%100!=0) or (i%100==0 and i%400==0):
pastdays+=sum(days2)
else:
pastdays+=sum(days1)
if (years%4==0 and years%100!=0) or (years%100==0 and years%400==0):
for x in range(months-1):
pastdays+=days2
pastdays+=days
else:
for x in range(months-1):
pastdays+=days1
pastdays+=days
return pastdays
dateTime = input('请输入当前的年月日,空格隔开').split()
for i in range(len(dateTime)):
dateTime=int(dateTime)
joindate = caculatedays(year,month,day)
workdate = caculatedays(dateTime,dateTime,dateTime)
print('入职第%d天-小陆'%(workdate-joindate))
本帖最后由 小庆子 于 2018-5-16 22:10 编辑
'''不想判断平年闰年 (¬︿̫̿¬☆)'''
now = input('老哥,今天是几几年几月几日哈?(输入格式:1970-10-25):').split('-')
month = [(1,31),(2,28),(3,31),(4,30),(5,31),(6,30),(7,31),(8,31),(9,30),(10,31),(11,30),(12,31)]
day1 = (int(now) - 2014)*365
day2 = 0
for i in range(1,int(now)):
day2 += int(month)
day2 = day2 - 212
day3 = int(now) - 18
day = day1 + day2 + day3
print('斯国一,你已经入职了%s天了呢!'%day)
好蠢
本帖最后由 萧丹夜 于 2018-5-18 11:48 编辑Year,Month,Day = map(int,input('请输入年月日(以-间隔):').split('-'))
Run =
Pin =
PrYear,PrMonth,PrDay = 2014 , 8 , 18
count = 1
CurYear = Year
while True :
if Year != PrYear and CurYear == Year:
if Year % 400 == 0 or ( Year % 100 != 0 and Year % 4 == 0 ):
for i in range(0,Month):
count += Run
count += Day
else :
for i in range(0,Month):
count += Pin
count += Day
CurYear = Year - 1
Month = 13
if CurYear != PrYear :
if CurYear % 400 == 0 or ( CurYear % 100 != 0 and CurYear % 4 == 0 ):
for i in range(0,13):
count += Run
else :
for i in range(0,13):
count += Pin
CurYear -= 1
if CurYear == PrYear and Year != PrYear :
for i in range(PrMonth + 1,Month):
count += Pin
count += ( 31 - 18 )
break
if CurYear == PrYear or Year == PrYear :
if Month == PrMonth :
count += ( Day - PrDay )
else:
for i in range(PrMonth + 1,Month):
count += Pin
count += ( 31 - 18 + Day )
break
print('入职第%d天-小陆'%count) str_in=input("请输入入职日期,格式为yyyymmdd:")
str_out=input("请输入当天日期,格式为yyyymmdd:")
y=int(str_in)
m=int(str_in)
d=int(str_in)
y1=int(str_out)
m1=int(str_out)
d1=int(str_out)
lst=
year=y
result=[]
for year in (range(y,y1+1)):
if (year%4==0 and year%100!=0) or year%400==0:
if year==y and m<=2:
result.append(sum(lst)+1-d)
if year==y1 and m1>2:
result.append(sum(lst+1+d1))
else:
result.append(366)
else:
if year==y:
result.append(sum(lst)-d)
elif year==y1:
result.append(sum(lst)+d1)
else:
result.append(365)
print("今天是入职的第%d天" %(sum(result))) import time
import datetime
strtime = time.strftime("%Y-%m-%d").split("-")
print(strtime)
access_protect =
sum_day = 0
month_day =
if int(strtime) - access_protect > 0:
count_year = (int(strtime)-access_protect-1)*365 + sum()
count_day = sum(month_day[:int(strtime)-1]) + int(strtime)
else:
count_year = 0
count_day = sum(month_day:int(strtime)]) + int(strtime) -17
sum_day = count_year + count_day
print(sum_day)
date1 = datetime.datetime(2014,8,18)
date2 = datetime.datetime(2018,9,25)
daty_c = (date2-date1).days
print(daty_c) def leap_year(year):
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
return True
else:
return False
def lead_time(date):
ref =
days = sum(ref[:date]) + date
if leap_year(date) and date > 2:
days += 1
return days
# date_1:入职日期 date_2:当前日期
date_1 =
date_2 =
# days_1:入职那年的第几天days_2:当前日期到入职那年1月1日的时间差
days_1 = lead_time(date_1)
days_2 = 0
for year in range(date_1, date_2):
if leap_year(year):
days_2 += 366
else:
days_2 += 365
result = days_2 + lead_time(date_2) - days_1 + 1
print(result)
请输入入职时间(例1999/1/1):2014/8/18
请输入当前日期(例1999/1/1):2017/4/19
976 本帖最后由 panheng 于 2019-8-20 06:42 编辑
import re
def get_days(month,day): #计算当年天数
monthlist =
daylist =
days = 0
for each in monthlist:
if monthlist.index(each)+1 < month:
days += daylist
days += day
return days
def leap_day(year): #计算闰年天数
leap_days = 0
for _ in range(2014,year):
if (_ % 4 == 0 and _ % 100 != 0) or _ % 400 == 0:
leap_days += 1
return leap_days
if __name__ == '__main__':
date = input("请输入日期:年月日")
datelist = re.findall(r'\d+', date)
year = int(datelist)
month = int(datelist)
day = int(datelist)
result = (year - 2014)*365 #计算结算日期前整年天数
result = result + get_days(month,day) - get_days(8,18) + leap_day(year) + 1 #加上本年天数,减去8月18日天数,在加上入职第一
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: #加上本年闰年天数
if month > 2:
result += 1
print("%s是小陆入职的第 %s 天"%(date,result))
修改了下,考虑到截至年份为闰年是否计算闰年天数