2012-06-07 1 views
2

Моей проблема может быть легко создана ниже сценарием:Неуверенные, что прибудет (Calendar.DAY_OF_WEEK) возвращает

//create a gregorian calendar object that set the date and time as 4th June 2012 at 10:30PM 
Calendar calendar = new GregorianCalendar(2012, 6, 4, 22, 30); 

//when I print out these: 
System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); 
System.out.println(calendar.get(Calendar.MINUTE)); 
System.out.println(calendar.get(Calendar.HOUR)); 
System.out.println(calendar.get(Calendar.DATE)); 
System.out.println(calendar.get(Calendar.MONTH)); 
System.out.println(calendar.get(Calendar.YEAR)); 

//output reads as: 
4 
30 
10 
4 
6 
2012 

//so does calendar.get(Calendar.DAY_OF_WEEK) == calendar.get(Calendar.DATE) ??? 

Просто так, что все ясно, 4 июня 2012 года является понедельник, поэтому не должен календарь .get (Calendar.DAY_OF_WEEK) возвращает 0 как часть первого дня недели?

Благодарим за вашу помощь и заботу, пожалуйста, также проверьте источник, на который вы ссылаетесь.

user1442080

ответ

6

Месяц в классы Java Календарь 0 на основе. Итак, июнь - месяц номер 5.

Фактически вы создали объект, представляющий 4 июля, который, случается, является средой, которая является четвертым днем ​​этой недели.

+0

СПАСИБО! Я также заметил, что дата начинается с 0. Поэтому я создал объект, который был представлен 5 июля. – user1442080

+0

Мое удовольствие. Вы также можете взглянуть на более интуитивную библиотеку времени: http://joda-time.sourceforge.net/. (О, и вы бы так любезны принять мой ответ ;-)) –

4

Следует всегда искать значения, возвращаемые Календарь. {Поле} например. например Calendar.SUNDAY, Calendar.MONDAY, Calendar.JANUARY, Calendar.MARCH и т. д. и т. д. Это потому, что значения, возвращаемые Calendar. {Field} зависят от TimeZone, указанного при создании экземпляра календаря. Вы можете попробовать это путем создания двух календарных экземпляров с разными часовыми поясами:

Calendar.getInstance("BST") 

и

Calendar.getInstance() // default timezone 

и теперь попытайтесь получить calendar.get(Calendar.DAY_OF_WEEK), который будет возвращать различные целые значения для этих двух случаев.

+0

Как calendar.get (Calendar.DAY_OF_WEEK) возвращает разные целочисленные значения? Значения дня недели являются константами, вам все равно нужно сравнить возвращаемое значение DAY_OF_WEEK с Calendar.FRIDAY (например). Значение первого дня недели может измениться в зависимости от часового пояса, но значения, возвращаемые DAY_OF_WEEK, всегда должны совпадать с константами календаря java. –