我有一个日历对象,如下所示代表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]
我有一个日历对象,如下所示,代表2014年8月8日。
它不是:MONTH=8
是九月,而不是八月(月份编号从零开始)。
您可以通过在输出中注明DAY_OF_YEAR=251
来验证自己。 The 251st day of a non-leap year is 8 September。
另一种检查时间戳的方法是将1410177767000
粘贴到http://www.epochconverter.com/
GregorianCalender将八月份视为“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));
}
}
正如我们的朋友所说,计数从0开始。因此,1月是0月。
如果你来到这里可能已经完成了代码。为了避免代码中的评论,您可以执行以下操作:
currentDateMonth = calendar.get(Calendar.MONTH);
currentDateMonth = currentDateMonth+1;
使用java.time类而不是可怕的遗留日期时间类及其疯狂的月份编号。
LocalDate.of( 2014 , Month.AUGUST , 8 )
.getDayOfWeek()
.equals( DayOfWeek.FRIDAY )
真正
您正在使用java.time类几年前取代的糟糕的应用程序旧日期时间类。
用LocalDate
表示仅日期值。请注意理智的编号,与传统类别不同:2014
表示2014年,1至12月表示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() ;