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

如何在Dart中实现按规则为每个日期生成对应标签的逻辑

日期标签生成逻辑实现方案

规则前置梳理

先明确规则的无歧义拆解:

  • 十位规则:
    • 当月首日至第一个周日结束前,标签十位为1(对应10~17段)
    • 第一个周日结束后至第二个周日结束前,标签十位为2(对应20~27段)
    • 第二个周日结束后至第三个周日结束前,标签十位为3(对应30~37段)
    • 以此类推,每过完一个完整周日,十位数值+1
  • 个位规则:
    • 星期一对应1、星期二对应2……星期日对应7,直接作为标签个位
    • 示例:25对应20段(第一个周日后的周期)的星期五,和题目给出的示例完全匹配

通用实现步骤(可适配任意编程语言)

  1. 提取输入日期的三个基础值:年份、月份、当月第几天
  2. 计算输入日期对应的星期数值,统一映射为1~7的范围(1=周一,7=周日)
  3. 计算当月第一个周日的日期:
    • 先算当月1号对应的星期数值w
    • 第一个周日的日期 = 1 + (7 - w) % 7
  4. 计算标签的十位数值:
    • 若当前日期 ≤ 第一个周日的日期,十位=1
    • 若当前日期 > 第一个周日的日期,十位=2 + ((当前日期 - 第一个周日的日期 - 1) // 7)
      (减1是为了将第一个周日后的周一到周日整个自然周归到同一个十位段)
  5. 最终标签值 = 十位 * 10 + 星期数值

代码示例(Python)

import datetime

def generate_date_tag(date: datetime.date) -> int:
    # 转换星期数值:datetime的weekday()返回0=周一、6=周日,映射为1~7
    weekday_num = date.weekday() + 1
    # 取当月1号的星期数值
    first_day = datetime.date(date.year, date.month, 1)
    first_day_week = first_day.weekday() + 1
    # 计算当月第一个周日的日期
    first_sunday = 1 + (7 - first_day_week) % 7
    # 计算十位
    if date.day <= first_sunday:
        tens = 1
    else:
        tens = 2 + ((date.day - first_sunday - 1) // 7)
    # 拼接返回结果
    return tens * 10 + weekday_num

# 测试用例
if __name__ == "__main__":
    # 2024年5月1号为周三,5号为当月第一个周日
    test1 = datetime.date(2024,5,5) # 当月第一个周日
    print(generate_date_tag(test1)) # 输出17,符合10段周日的规则
    test2 = datetime.date(2024,5,6) # 第一个周日之后的周一
    print(generate_date_tag(test2)) # 输出21,符合20段周一的规则
    test3 = datetime.date(2024,5,10) # 第一个周日之后的周五
    print(generate_date_tag(test3)) # 输出25,完全匹配题目给出的示例

边界场景验证

  • 当月1号刚好是周日:第一个周日为1号,当天标签为17,2号周一直接进入20段,标签为21,符合规则
  • 当月有5个周日:第四个周日结束后十位自动变为5,生成51~57的标签,逻辑依然适用

内容的提问来源于stack exchange,提问作者scott lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:36:00