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

关于Joda/Java 8 DateTime对象的星期、小时、月份值映射的确认

嘿,我来帮你理清Joda-Time和Java 8 DateTime API里这些时间字段的映射关系,顺便验证你提到的内容对不对~

星期的数值映射

不管是Joda-Time还是Java 8的java.time API,星期的数值映射都和你说的一致:

  • Joda-Time:调用DateTime.getDayOfWeek(),返回1对应周一,7对应周日。比如周一的时候这个方法会返回1,周日返回7。
  • Java 8:用LocalDate、ZonedDateTime等类的getDayOfWeek()方法会返回DayOfWeek枚举,调用枚举的getValue()方法后,同样是1=周一,7=周日。
一天中的小时映射

这里你提到的“1对应凌晨12点”是不准确的,得区分24小时制和12小时制两种情况来看:

24小时制(最常用)

  • Joda-Time:getHourOfDay()方法返回0到23的数值,其中0对应凌晨12点(午夜),1对应凌晨1点,以此类推,23对应晚上11点。
  • Java 8:LocalTime.getHour()或者ZonedDateTime.getHour()同样返回0-23,映射逻辑和Joda完全一致。

12小时制

如果是按12小时制来取小时数:

  • Joda-Time:用getHourOfHalfDay()返回1-12的数值,其中12对应凌晨12点(午夜)和中午12点,1-11对应1点到11点。要区分是上午还是下午,得搭配getAMPMOfDay()(0代表AM,1代表PM)来看。
  • Java 8:可以通过ChronoField.CLOCK_HOUR_OF_AMPM字段获取,同样是1-12的范围,12对应午夜(AM)和中午(PM),1-11对应对应时段的1点到11点。

简单说:你之前认为的“1对应凌晨12点”是错的,12小时制里凌晨12点对应的数值是12,而不是1。

月份的数值映射

这部分你说的完全正确:

  • Joda-Time:getMonthOfYear()方法返回1对应一月,12对应十二月。
  • Java 8:LocalDate.getMonthValue()或者Month枚举的getValue()方法,都是1=一月,12=十二月。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:34:12