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

日期转年度周数:是否存在对应的转换算法?

日期转年度周数的算法存在吗?

当然存在,这类算法已经非常成熟,不同场景下会遵循不同的周数定义,其中ISO 8601标准是目前全球应用最广泛的规范,下面详细说明:

核心规范:ISO 8601周数规则

  • 每周以周一为起始日,周日为结束日
  • 第1周的判定:包含该年度第一个周四的周(等价于包含1月4日的周,或者至少有4天落在当年的周)
  • 跨年度情况:如果某一周的大部分天数属于下一年,那么该周会被算作下一年的第1周;反之,年初的部分周可能属于上一年的最后一周

手动计算算法(ISO 8601为例)

  1. 确定给定日期的星期几(周一=1,周日=7)
  2. 找到当年的第一个周四:根据1月1日的星期数推导,比如1月1日是周二,第一个周四就是1月3日;如果1月1日是周五,第一个周四就是1月7日
  3. 计算给定日期与第一个周四的天数差:天数差 = 给定日期的日序数 - 第一个周四的日序数
  4. 周数计算:周数 = (天数差 // 7) + 1。如果给定日期在第一个周四之前且属于上一年的最后一周,需切换到上一年的周数(比如2023年12月31日是周日,属于2024年第1周)

其他常见周数定义

  • 美式周定义:每周以周日为起始日,第1周是包含1月1日的周(哪怕这一周只有1天在当年)
  • 简化地区定义:第1周是1月1日所在的周,周一为起始日,不管周内天数占比

实际实现

几乎所有主流编程语言都内置了现成的工具,无需手动实现算法:

  • Python:datetime.date(2023,12,31).isocalendar() 返回 (2024, 1, 7),即2024年第1周、周日
  • Java:LocalDate.of(2023,12,31).get(WeekFields.ISO.weekOfWeekBasedYear()) 返回1
  • JavaScript:new Date(2023,11,31).toLocaleDateString('en-GB', {week: 'numeric', year: '2024'})(需匹配对应周规则的语言环境)

内容的提问来源于stack exchange,提问作者J. Ike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:24:17