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

Java中DOY转日期时,DOY=1场景返回年份错误问题排查

问题原因与解决方案

问题根源

你遇到的年份显示错误,核心原因是日期格式化时误用了YYYY模式:

  • YYYY代表周年(Week Year),它的规则是:以包含当年第一个星期四的星期为周年的起始周。2023年1月1日是星期日,属于2022年的最后一个周年周(2022年12月29日是当年最后一个星期四),因此用YYYY格式化时会显示2022。
  • 1月2日及之后的日期属于2023年的周年周,所以YYYY显示正常,这就是为什么只有DOY=1时出问题。

解决方法

将格式化模式中的YYYY替换为yyyy,yyyy代表公历纪年的年份,符合日常使用的年份逻辑。

修改第一种实现(Java 8+ DateTime API)

// 原代码
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.YYYY  EEE");
// 修改后
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy  EEE");

修改第二种实现(Calendar + SimpleDateFormat)

// 原代码
// SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.YYYY  HH:mm:ss EEE");
// 修改后
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy  HH:mm:ss EEE");

修改后,调用getDateFromDoy(1,2023)会正确返回01.01.2023 So.(星期显示随本地化设置变化)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:12:37