关于日期的计算,天数,星期几

# 题目描述
# 已知2024年1月1日是星期一,
# 输入一个日期(格式YYYY-MM-DD,范围2024年内),
# 判断该日期是星期几。


from _datetime import datetime

def find_week(data):
    start_week=0
    #根据题意,默认第一天为周一
    know_week=datetime(2024,1,1)
    #根据题意,调用datetime,来初始化时间,年月日
    input_week=datetime.strptime(data,"%Y-%m-%d")

    #输入一个日期(格式).strptime''''''''''''''''''''''''''''''''''''''''''''重要
    day_=(input_week-know_week).days#相差多少天
    week=(start_week+day_)%7#这是一个技巧

    weeks=['星期一','星期二','星期三','星期四','星期五','星期六','星期天']
    week_end=weeks[week]
    print(week_end)

data=input()
find_week(data)




这段代码实现了根据输入的 2024 年内日期判断是星期几的功能,涉及到以下几个重要的 Python 知识点:

1. 模块导入与 datetime 类

python

from _datetime import datetime

 

通常情况下,我们会使用 from datetime import datetime 来导入 datetime 类。datetime 类是 Python 标准库中用于处理日期和时间的强大工具,它可以表示一个具体的日期和时间点,包含年、月、日、时、分、秒等信息。通过这个类,我们可以方便地进行日期和时间的计算、格式化和解析。

2. 字符串解析为日期对象

python

input_week = datetime.strptime(data, "%Y-%m-%d")

 

strptime 是 datetime 类的一个方法,用于将字符串按照指定的格式解析为 datetime 对象。%Y 表示四位数的年份,%m 表示两位数的月份,%d 表示两位数的日期。通过这种方式,我们可以将用户输入的字符串日期转换为 Python 可以处理的日期对象,以便进行后续的计算。

3. 日期对象的初始化

python

know_week = datetime(2024, 1, 1)

 

这行代码使用 datetime 类的构造函数创建了一个具体的日期对象,表示 2024 年 1 月 1 日。通过指定年、月、日作为参数,我们可以精确地定义一个日期。

4. 日期对象的减法运算

python

day_ = (input_week - know_week).days

 

datetime 对象之间可以进行减法运算,得到的结果是一个 timedelta 对象,它表示两个日期或时间之间的差值。timedelta 对象有一个 days 属性,通过访问这个属性,我们可以得到两个日期之间相差的天数。

5. 取模运算

python

week = (start_week + day_) % 7

 

取模运算符 % 用于计算两个数相除的余数。在这个代码中,我们利用取模运算将相差的天数转换为星期几的索引。因为一周有 7 天,所以通过对总天数取模 7,我们可以得到一个 0 到 6 之间的整数,分别对应星期一到星期天。

6. 列表索引与元素访问

python

weeks = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
week_end = weeks[week]

 

列表是 Python 中常用的数据结构,用于存储多个元素。通过索引,我们可以访问列表中的特定元素。在这个代码中,我们使用前面计算得到的星期索引 week 来访问 weeks 列表中的元素,从而得到对应的星期几的名称。

7. 函数定义与调用

python

def find_week(data):
    # 函数体
    ...

data = input()
find_week(data)

 

函数是 Python 中组织代码的一种方式,通过定义函数,我们可以将一段具有特定功能的代码封装起来,提高代码的复用性和可读性。在这个代码中,我们定义了一个名为 find_week 的函数,它接受一个日期字符串作为参数,并在函数内部完成日期到星期几的转换。然后,我们通过 input() 函数获取用户输入的日期,并调用 find_week 函数进行处理。

8. 用户输入处理

python

data = input()

 

input() 是 Python 内置函数,用于从标准输入(通常是键盘)读取用户输入的内容,并将其作为字符串返回。在这个代码中,我们使用 input() 函数获取用户输入的日期字符串,然后将其传递给 find_week 函数进行处理。



# 题目:
# 输入一个字符串表示日期(格式YYYY-MM-DD),输出该日期是当年的第几天。
# 输入示例:
# 2025-04-01
# 输出示例:
# 91
# 提示:注意闰年判断。


# 根据日期来判断当天是当年的第几天
#判断是否是闰年:能被4整除,但不能被100整除或者能被400整除

from datetime import datetime#二话不说,直接调用第三方库

def find_day(t):
    input_day=datetime.strptime(t,'%Y-%m-%d')
    start_day=datetime(input_day.year,1,1)#记住,这个input_day.year,是提取input_day的年
    main_day=(input_day-start_day).days+1 #记住这个是第几天,要+1,假如2024-1-2,那么是不是2024年的第二天。相减的话就是2-1=1,所以要加一天
    print(main_day)

t=input()
find_day(t)







        

这段代码主要实现了根据输入的日期字符串(格式为 YYYY-MM-DD)计算该日期是当年的第几天的功能,下面为你总结其中涉及的知识点:

1. 模块导入

python

from datetime import datetime

datetime 是 Python 标准库中的一个模块,它提供了处理日期和时间的类和方法。这里通过 from...import 语句从 datetime 模块中导入了 datetime 类,该类可用于表示一个具体的日期和时间。

2. 函数定义

python

def find_day(t):
    # 函数体
    ...

使用 def 关键字定义了一个名为 find_day 的函数,该函数接受一个参数 t,代表输入的日期字符串。函数内部封装了计算日期是当年第几天的逻辑。

3. 字符串解析为日期对象

python

input_day = datetime.strptime(t, '%Y-%m-%d')

strptime 是 datetime 类的一个类方法,用于将字符串按照指定的格式解析为 datetime 对象。%Y 表示四位数的年份,%m 表示两位数的月份,%d 表示两位数的日期。通过这种方式,可以将用户输入的字符串日期转换为 Python 可以处理的日期对象。

4. 日期对象的创建

python

start_day = datetime(input_day.year, 1, 1)

利用 datetime 类的构造函数创建了一个新的日期对象 start_day,表示输入日期所在年份的 1 月 1 日。input_day.year 用于提取 input_day 日期对象中的年份信息。

5. 日期对象的减法运算

python

main_day = (input_day - start_day).days + 1

datetime 对象之间可以进行减法运算,结果是一个 timedelta 对象,它表示两个日期或时间之间的差值。timedelta 对象有一个 days 属性,通过访问该属性可以得到两个日期之间相差的天数。由于要计算的是该日期是当年的第几天,所以需要在差值的基础上加 1。

6. 输入输出处理

python

t = input()
find_day(t)

input() 是 Python 的内置函数,用于从标准输入(通常是键盘)读取用户输入的内容,并将其作为字符串返回。然后将这个字符串作为参数传递给 find_day 函数进行处理。在 find_day 函数内部,使用 print(main_day) 将计算结果输出到控制台。

7. 闰年处理

虽然代码中没有显式地进行闰年判断,但由于使用了 datetime 模块进行日期计算,该模块会自动处理闰年的情况,确保日期计算的准确性。例如,在计算 2 月 29 日与 1 月 1 日之间的天数时,会正确地考虑到闰年的 2 月有 29 天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值