День недели по григорианскому календарю начинается со вторника вместо воскресенья.

Я использую GregorianCalendar следующим образом

новый григорианский календарь (1900 г., календарь. ЯНВАРЬ, 1)

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

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

Я хочу вернуть объект календаря.

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

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;  
    }

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


person maria_k    schedule 13.11.2014    source источник
comment
Извините, но я не понимаю вопроса. Для new GregorianCalendar(1900, Calendar.JANUARY, 1) я получаю понедельник Mon, 1 Jan 1900, а не вторник. Кроме того, calendar.get(Calendar.DAY_OF_WEEK)) зависит от даты. Это не то же самое для всех недель. Я не понимаю. Можете ли вы уточнить немного больше?   -  person Tobías    schedule 13.11.2014
comment
Вторник был случайным результатом. После инициализации григорианского календаря я установил целое число, которое хочу преобразовать в дату. И мне было интересно, как настроить дату, чтобы вернуть воскресение как день, а не другой день. Вам это более понятно?   -  person maria_k    schedule 13.11.2014
comment
Нисколько. Где целое число, которое вы упоминаете в вопросе? Как вы устанавливаете это целое число? Отредактируйте свой вопрос и опубликуйте соответствующий код. Что представляет собой это целое число? Это временная метка? Случайное значение? Если вы просто хотите установить день календаря на ВОСКРЕСЕНЬЕ: calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);   -  person Tobías    schedule 13.11.2014


Ответы (2)


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

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

person user2708647    schedule 13.11.2014

tl;dr

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

Java.время

Современный способ определить дату предыдущего дня недели — использовать классы 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 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.

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

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

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

person Basil Bourque    schedule 11.07.2017