我有一个代表08 Aug 2014
的日历对象。这是一个星期五。所以myCal.get(Calendar.DAY_OF_WEEK)
应该是6.但它给出2.为什么?
java.util.GregorianCalendar[time=1410177767000,areFieldsSet=true,lenient=true,zone=Asia/Calcutta,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=251,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=32,SECOND=47,MILLISECOND=0,ZONE_OFFSET=19800000,DST_OFFSET=0]
答案 0 :(得分:11)
我有一个日历对象,如下所示,代表2014年8月8日。
它不是:MONTH=8
是9月,而不是8月(月份编号从零开始)。
您可以在输出中注明DAY_OF_YEAR=251
来验证自己。 The 251st day of a non-leap year is 8 September
检查时间戳的另一种方法是将1410177767000
粘贴到http://www.epochconverter.com/
答案 1 :(得分:3)
格里高利历月需要一个月的八月份,因为' 7'而不是' 8'自1月起表示为' 0'。 参考:Gregorian Calendar
请仔细检查以下内容,它应该有效。
import java.util.*;
public class Test {
public static void main(String args[]) {
GregorianCalendar myCal = new GregorianCalendar(2014, 7, 8);
System.out.println(myCal.get(Calendar.DAY_OF_WEEK));
}
}
答案 2 :(得分:0)
正如我们的朋友所说,计数从0开始。因此,一月是月份0。
如果您来到这里,您可能已经完成了代码。为了避免对代码进行审查,您可以执行以下操作:
currentDateMonth = calendar.get(Calendar.MONTH);
currentDateMonth = currentDateMonth+1;
答案 3 :(得分:0)
使用 java.time 类,而不要使用带有疯狂月份编号的可怕的旧式日期时间类。
LocalDate.of( 2014 , Month.AUGUST , 8 )
.getDayOfWeek()
.equals( DayOfWeek.FRIDAY )
true
您使用的是可怕的应用程序旧日期时间类,而这些类早已被 java.time 类取代。
用LocalDate
代表仅日期的值。请注意,与传统类不同,编号是合理的:2014
表示2014年,而1-12个月表示一月至十二月。因此,无意中使用错误的月份的问题是没有意义的,如果您一直使用现代且设计良好的 java.time 类,就永远不会发生。
LocalDate ld = LocalDate.of( 2014 , Month.AUGUST , 8 ) ;
询问DayOfWeek
枚举对象,该对象表示该日期的星期几。
DayOfWeek dow = ld.getDayOfWeek() ;
如果您手中有一个GregorianCalendar
对象(由尚未更新为 java.time 的旧代码提供),请进行转换。转换为ZonedDateTime
。然后提取DayOfWeek
。
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
DayOfWeek dow = zdt.getDayOfWeek() ;