问题陈述:编写一个名为yesterday的函数,将今天的日期作为输入,并输出昨天的日期。输入:三个数字分别代表今天的日期[1-31]、月份[1-12]和年份[19xx-20xx]。您可以假设在测试用例中没有闰年,也就是说,2月份有28天。输出:以dd/mm/yy格式打印昨天的三个数字
def yesterday(dd, mm, yyyy):
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_dd, new_mm, new_yyyy = yesterday(dd, mm, yyyy)
print("%d/%d/%d" % (new_dd, new_mm, new_yyyy))
##为啥大家都要导入一个时间的包,题目的意思明显是不能导入包的,不然提闰年干嘛。
def yesterday(dd, mm, yyyy):
if dd>1:
return dd-1,mm,yyyy
elif mm==1:
return 31,12,yyyy-1
elif mm==3:
return 28,2,yyyy
elif mm in [5,7,10,12]:
return 30,mm-1,yyyy
else:
return 31,mm-1,yyyy
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_dd, new_mm, new_yyyy = yesterday(dd, mm, yyyy)
print("%d/%d/%d" % (new_dd, new_mm, new_yyyy))
这个问题主要需要解决今天和昨天是否跨年和跨月的问题。
跨年:即今天为1月1日,昨日年份减一,月日为12/31
不跨年、不跨月:只需日减一
不跨年、跨月:即今天为某月1日(1月1气除外)
定义一个列表,存放12个月的天数。
昨天日期为月数减一,天数为列表中下标为对应月份的值。
完整的代码如下:
from datetime import datetime, timedelta
def yesterday(dd, mm, yyyy):
presentday = datetime(yyyy, mm, dd)
#获取前一天
yesterday = presentday - timedelta(1)
return (yesterday.day, yesterday.month, yesterday.year)
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_dd, new_mm, new_yyyy = yesterday(dd, mm, yyyy)
print("%d/%d/%d" % (new_dd, new_mm, new_yyyy))
参考代码:
#输出今天的日期
import time # 导入time库
print(time.strftime("%Y-%m-%d")) # 输出今天的日期
import datetime # 导入datetime库
print(datetime.date.today()) # 输出今天的日期
# 2.输出昨天的日期
import datetime # 导入datetime库
today = datetime.date.today() # 定义today变量,并赋值今天的日期
oneday = datetime.timedelta(days=1) # 计算1天的时间间隔
# timedelta
# 该函数表示两个时间的间隔
# 参数可选、默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
yesterday = today - oneday # 今天的日期减去1天的时间间隔
print(yesterday) # 输出昨天的日期
#格式化1为:xxxx年xx月xx日星期几,举例:2019年8月13日星期二
import time # 导入time库
print(time.strftime("%Y/%m/%d")) # 格式化日期 xxxx/xx/xx
print(time.strftime("%m/%d/%Y")) # 格式化日期 xx/xx/xxxx
# print(time.strftime("%Y年%m/%d")) # 会出错,不能带有中文,so,有了下面的解答
ttime = time.time() # 获取时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
ltime = time.localtime(ttime) # 生成struct_time
weektuple = ('日', '一', '二', '三', '四', '五', '六') # 定义星期元组
print("{}年{}月{}日,星期{}".format(ltime.tm_year, ltime.tm_mon, ltime.tm_mday, weektuple[ltime.tm_wday])) # 输出我们想要的日期格式
import time
from datetime import datetime, date, timedelta
# 当前日期
now_date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("now_date: {}".format(now_date))
# 当前时间的年月日
year = datetime.now().year
month = datetime.now().month
day = datetime.now().day
print(f"year: {year}, month: {month}, day: {day}")
# 昨天
month_yesterday = (date.today() + timedelta(days=-1)).month
day_yesterday = (date.today() + timedelta(days=-1)).day
print(f"month_yesterday: {month_yesterday}, day_yesterday: {day_yesterday}")
实现代码如下:
from datetime import datetime, timedelta
def yesterday(dd, mm, yyyy):
# 取前一天的时间
yes = datetime(day=dd, month=mm, year=yyyy) + timedelta(days=-1)
yes.strftime('%d/%m/%Y')
return yes.day, yes.month, yes.year
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_dd, new_mm, new_yyyy = yesterday(dd, mm, yyyy)
print("%d/%d/%d" % (new_dd, new_mm, new_yyyy))
输出样例
14
12
2022
13/12/2022
import datetime
def yesterday(dd, mm, yyyy):
miyazakiBirthDate = datetime.date(yyyy, mm, dd)
miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=-1)
return miyazakiBirthNextDay.strftime('%d/%m/%Y')
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_day = yesterday(dd, mm, yyyy)
print(new_day)
1.首先判断数据有效性附和题目给出的范围
2.其次计算出特殊月份和日期
`
def yesterday(dd, mm, yyyy):
#首先判断输入数据的有效性
m_little = [4,6,9,11]
isTest = False
if isinstance(dd,int) and isinstance(mm,int) and isinstance(yyyy,int):
isTest = True
else:
print("请输入整数日月年!!!")
return 00, 00, 0000
if isTest:
if dd < 1 or dd >31 or mm < 1 or mm >12 or yyyy<1900 or yyyy>2999:
print("请输入有效日期范围!!!")
return 00, 00, 0000
else:
if dd == 1:
if mm-1 in m_little:
return 30,mm-1,yyyy
elif mm == 3:
return 28, 2, yyyy
elif mm == 1:
return 31, 12, yyyy - 131
else:
return 31,mm-1,yyyy
else:
return dd - 1, mm, yyyy
if __name__ == "__main__":
dd = int(input())
mm = int(input())
yyyy = int(input())
new_dd, new_mm, new_yyyy = yesterday(dd, mm, yyyy)
print("%d/%d/%d" % (new_dd, new_mm, new_yyyy))
运行结果
def yesterday(date, month, year):
day = date
mon = month
yea = year
# 如果是1月1日,那么昨天的日期就是去年的12月31日
if day == 1 and mon == 1:
day = 31
mon = 12
yea -= 1
# 如果是其他月份的1日,那么昨天的日期就是上个月的最后一天
elif day == 1:
mon -= 1
if mon in (1, 3, 5, 7, 8, 10, 12):
day = 31
elif mon == 2:
day = 28
else:
day = 30
# 否则,只需将日期减1即可
else:
day -= 1
return f"{day:02d}/{mon:02d}/{yea:02d}"