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

为何DAY_OF_WEEK多算一天?Calendar与Date API返回结果异常

问题根源:时间戳单位不匹配

你遇到的问题核心其实很直白——Java的Calendar.setTimeInMillis()和Date构造函数要求传入的是毫秒级时间戳,但你用的1560049200是秒级时间戳。

具体拆解:

当你把秒级戳直接当作毫秒传入时,实际对应的时间是1970-01-19 04:40:49.200 UTC,这个时间确实是周一(Monday):

  • cal.get(Calendar.DAY_OF_WEEK)返回2,正好等于Calendar.MONDAY的常量值(2),所以判断返回true;
  • Date.getDay()返回1,因为这个方法的规则是0=周日,1=周一……6=周六,也完全匹配该时间的结果。

而你预期的周日(Sunday)对应的应该是毫秒级时间戳1560049200000(原秒级戳乘以1000),这个时间的UTC时刻是2019-06-09 03:00:00,转换到美国时区后属于周日范畴。

修复后的代码示例:

// 注意加L声明为长整型,避免整数溢出
Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(1560049200L * 1000); 
System.out.println(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY); // 现在返回true
System.out.println(cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US)); // 输出Sunday

// Date类的修复版本(注:Date类多数方法已过时,建议优先用Calendar或Java8+的java.time API)
Date date = new Date(1560049200L * 1000); 
System.out.println(date.getDay()); // 返回0,对应周日

额外小提示:

Date类的getDay()等方法早已被标记为过时,如果你是Java 8及以上版本,更推荐使用java.time包下的API(比如ZonedDateTime、DayOfWeek),日期时间的处理逻辑会更清晰,也不容易踩这类单位坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:10:12