关于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
相关产品推荐
相关产品推荐

