Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日历给出了错误的星期几_Java_Date_Calendar_Dayofweek - Fatal编程技术网

Java 日历给出了错误的星期几

Java 日历给出了错误的星期几,java,date,calendar,dayofweek,Java,Date,Calendar,Dayofweek,我有一个日历对象,如下所示,表示2014年8月8日。这是一个星期五。所以myCal.get(Calendar.DAY\u OF\u 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

我有一个日历对象,如下所示,表示2014年8月8日。这是一个星期五。所以
myCal.get(Calendar.DAY\u OF\u 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\u OF_YEAR=251
来验证自己


检查时间戳的另一种方法是将
1410177767000
粘贴到中,格里高利日历将八月的月份表示为“7”,而不是“8”,因为一月表示为“0”。 参考:

因此,请检查以下,它应该工作

   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开始。所以,一月是第0个月

如果你来这里,你可能已经完成了代码。为了避免代码中的审查,您可以执行以下操作:

currentDateMonth = calendar.get(Calendar.MONTH);

currentDateMonth = currentDateMonth+1; 
tl;博士 使用java.time类,而不是带有疯狂月份编号的糟糕的遗留日期时间类

LocalDate.of( 2014 , Month.AUGUST , 8 )
.getDayOfWeek()
.equals( DayOfWeek.FRIDAY )
真的

java.time 您正在使用可怕的应用程序旧日期时间类,这些类在几年前被java.time类取代

LocalDate ld = LocalDate.of( 2014 , Month.AUGUST , 8 ) ;
健全的编号 用
LocalDate
表示仅限日期的值。请注意,与传统类别不同,sane编号为:
2014
表示2014年,第1-12个月表示1-12月。因此,您无意中使用了错误月份的问题是没有意义的,如果您使用的是现代且设计良好的java.time类,就永远不会发生这种情况

LocalDate ld = LocalDate.of( 2014 , Month.AUGUST , 8 ) ;
询问表示该日期星期几的
DayOfWeek
enum对象

DayOfWeek dow = ld.getDayOfWeek() ;
转换 如果您手头有一个
gregoriacalendar
对象,该对象由尚未更新为java.time的旧代码提供,请转换。转换为
ZoneDateTime
。然后提取
DayOfWeek

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
DayOfWeek dow = zdt.getDayOfWeek() ;

1+这就是为什么不应该使用幻数,而应该使用常量,例如Month.AUGUST.OMG。基于错误的假设,我一直在调试我的代码。