python用给定的条件做一个时间函数

问题陈述:编写一个名为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月1日,昨日年份减一,月日为12/31

  2. 不跨年、不跨月:只需日减一

  3. 不跨年、跨月:即今天为某月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))

运行结果

img


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}"