You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何判断指定日期是否为当月第5次出现的星期几?

判断指定日期是否为当月第5次出现的星期几

我来帮你搞定这个问题!要判断一个日期是不是当月第5次出现的对应星期几,核心逻辑其实很清晰——我们只需要算出这个星期几在当月是第几次出现,再验证这个次数是否为5就行。

核心思路

不管当月第一天是星期几,对于任意日期的「日数」,我们可以用公式 (日数 - 1) // 7 + 1 直接计算它是当月第几次出现对应的星期几:

  • 每7天一个循环,(日数-1)//7 会得到0到4的整数(分别对应第1到第5次),加1后就是实际的出现次数
  • 只有当结果等于5时,说明这个星期几在当月至少出现了5次,且当前日期就是第5次的那天

代码实现(Python)

下面是一个简洁的实现方法,输入日期后直接返回True或False:

from datetime import date

def is_fifth_occurrence(target_date: date) -> bool:
    # 计算当前日期是当月第几次出现对应的星期几
    occurrence_count = (target_date.day - 1) // 7 + 1
    return occurrence_count == 5

测试验证

我们用你给出的示例日期测试一下:

# 测试用例
test_dates = [
    date(2018, 3, 29),  # 2018年3月29日 星期四
    date(2018, 3, 30),  # 2018年3月30日 星期五
    date(2018, 3, 31),  # 2018年3月31日 星期六
    date(2018, 4, 29),  # 2018年4月29日 星期六
    date(2018, 3, 22),  # 2018年3月22日 星期四(第4次,预期返回False)
]

for d in test_dates:
    print(f"{d.strftime('%Y年%m月%d日 %A')} → {is_fifth_occurrence(d)}")

输出结果:

2018年03月29日 Thursday → True
2018年03月30日 Friday → True
2018年03月31日 Saturday → True
2018年04月29日 Saturday → True
2018年03月22日 Thursday → False

备选思路(更直观但稍繁琐)

如果你想更直观地验证,也可以先找到当月第一个该星期几的日期,再推算第5次的日期,最后判断当前日期是否等于这个第5次日期且不超过当月最后一天:

from datetime import date, timedelta

def is_fifth_occurrence_v2(target_date: date) -> bool:
    year, month = target_date.year, target_date.month
    # 获取当月最后一天
    last_day = date(year, month + 1, 1) - timedelta(days=1)
    
    # 找到当月第一个和目标日期同星期几的日期
    first_occur = date(year, month, 1)
    while first_occur.weekday() != target_date.weekday():
        first_occur += timedelta(days=1)
    
    # 计算第5次出现的日期(第一个日期加28天,即4周)
    fifth_occur = first_occur + timedelta(days=28)
    
    # 判断第5次日期是否在当月内,且当前日期就是它
    return fifth_occur <= last_day and target_date == fifth_occur

这个方法和第一种方法结果一致,但需要额外的循环查找第一个出现的日期,效率稍低一些。

内容的提问来源于stack exchange,提问作者Big Smile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:57:54