2014-11-13 8 views
2

я использую GregorianCalendar, как это следуетГригорианский календарь начиная день недели вторник вместо воскресенье

новый GregorianCalendar (1900, Calendar.JANUARY, 1)

и возвращает дату, начиная со вторника.

Есть ли способ настроить его, чтобы вернуться в первый день недели в «воскресенье».

Я хочу вернуть объект Calendar.

Я использовал следующее решение

switch (gregorianCalendar.get(Calendar.DAY_OF_WEEK)) {  
     case Calendar.MONDAY: 
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -1);  
      break; 
     case Calendar.TUESDAY: 
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -2); 
      break; 
     case Calendar.WEDNESDAY: 
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -3); 
      break; 
     case Calendar.THURSDAY: 
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -4); 
      break; 
     case Calendar.FRIDAY: 
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -5); 
      break; 
     case Calendar.SATURDAY:  
      gregorianCalendar.add(Calendar.DAY_OF_WEEK, -6); 
      break; 
    } 

Я не знаю, если его лучший.

+0

Извините, но я не понимаю вопроса. Для 'нового GregorianCalendar (1900, Calendar.JANUARY, 1)' Я получаю понедельник 'Mon, 1 Jan 1900' не во вторник. Кроме того, 'calendar.get (Calendar.DAY_OF_WEEK))' зависит от даты. Это не то же самое в течение всех недель. Я не понимаю. Можете ли вы подробнее рассказать? –

+0

Вторник был случайным результатом. После инициализации gregorian calendar я установил целое число, которое я хочу преобразовать в дату. И мне было интересно, как настроить дату, чтобы вернуть воскресенье как день, возвращенный, а не другой день. Это более ясно для вас? –

+0

Нет. Где Integer вы упомянули в вопросе? Как установить этот Integer? Измените свой вопрос и разместите код _relevant_. Что представляет этот Integer? Это временная метка? Случайное значение? Если вы просто хотите установить день календаря в SUNDAY: 'calendar.set (Calendar.DAY_OF_WEEK, Calendar.SUNDAY);' –

ответ

2

Я понимаю, что вы ищете предыдущее воскресенье? Тогда я предпочел бы сделать что-то вроде:

while (gregorianCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) { gregorianCalendar.add(Calendar.DAY_OF_WEEK, -1); }

0

ТЛ; дг

LocalDate.of(2017 , Month.MARCH , 23) 
     .with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)) 

java.time

Современный способ определить дату предыдущего дня-недельного с классами java.time. Старые классы даты-времени, такие как Date и Calendar, теперь устарели, устарели.

Класс LocalDate представляет собой значение только для даты без времени суток и без часового пояса.

Интерфейс TemporalAdjuster предоставляет возможность определять другие даты с одной даты. Реализации, которые нам нужны, находятся в классе TemporalAdjusters (обратите внимание на множественное число).

LocalDate ld = LocalDate.of(2017 , Month.MARCH , 23) ; 
LocalDate previousSunday = ld.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)) ; 

Если вы пытаетесь представить в неделю в виде набора значений день-неделю в определенном порядке, используйте EnumSet с DayOfWeek перечислений объектов.

EnumSet<DayOfWeek> dows = EnumSet.of(DayOfWeek.SUNDAY , DayOfWeek.MONDAY , …) ; 

О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

Смежные вопросы