Получить день недели от GregorianCalendar

у меня есть дата, и мне нужно знать день недели, поэтому я использовал объект GregorianCalendar, но я возвращаю некоторые даты, которые неверны.

GregorianCalendar calendar = new GregorianCalendar(year, month, day);
int i = calendar.get(Calendar.DAY_OF_WEEK);

что я делаю не так?

спасибо!

ИЗМЕНИТЬ РЕШЕНИЕ:

mont--;
GregorianCalendar calendar = new GregorianCalendar(year, month, day);
int i = calendar.get(Calendar.DAY_OF_WEEK);

    if(i == 2){
        dayOfTheWeek = "Mon";           
    } else if (i==3){
        dayOfTheWeek = "Tue";
    } else if (i==4){
        dayOfTheWeek = "Wed";
    } else if (i==5){
        dayOfTheWeek = "Thu";
    } else if (i==6){
        dayOfTheWeek = "Fri";
    } else if (i==7){
        dayOfTheWeek = "Sat";
    } else if (i==1){
        dayOfTheWeek = "Sun";
    }

3 ответов


TimeZone timezone = TimeZone.getDefault();
Calendar calendar = new GregorianCalendar(timezone);
calendar.set(year, month, day, hour, minute, second);

String monthName=calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());//Locale.US);
String dayName=calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault());//Locale.US);

Joda Времени

я использую Joda Времени библиотека для всех операций, связанных с датой/временем. Joda учитывает вашу локаль и получает результаты соответственно:

import org.joda.time.DateTime;
DateTime date = new DateTime(year, month, day, 0, 0, 0);

или

DateTime date = DateTime().now();

день недели (int):

date.getDayOfWeek();

день недели (короткая строка) с помощью toString() и DateTimeFormat варианты:

date.toString("EE");

tl; dr

myGregCal                  // `GregorianCalendar` is a legacy class, supplanted by the modern `java.time.ZonedDateTime` class.
    .toZonedDateTime()     // Convert to `ZonedDateTime`.
    .getDayOfWeek().       // Extract a `DayOfWeek` enum object, one of seven pre-defined objects, one for each day of the week.
    .getDisplayName(       // Automatically localize, generating a `String` to represent the name of the day of the week.
        TextStyle.SHORT ,  // Specify how long or abbreviated.
        Locale.US          // Locale determines the human language and cultural norms used in localization.
    )                      // Returns a `String` object.

Мон

LocalDate.now( ZoneId.of( "Africa/Tunis" ) )              // Get current date for people in a certain region, without time-of-day and without time zone.
.getDayOfWeek()                                           // Extract a `DayOfWeek` enum object.
.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )  // Generate a string representing that day-of-week, localized using the human language and cultural norms of a particular locale.

лунди

java.время

преобразовать хлопотное старое наследие java.util.GregorianCalendar объект для современной java.время объекта путем вызова новых методов, добавленных в старый класс.

ZonedDateTime zdt = myGregCal.toZonedDateTime();

скачать DayOfWeek перечислить объект для этого момента в этом часовом поясе.

DayOfWeek dow = zdt.getDayOfWeek();

ДОУ.метод toString(): Среда

пройти эти DayOfWeek объекты вокруг вашего кода, а не передавать целые числа, такие как 1-7 или строки, такие как "MON". Используя объекты перечисления, можно сделать код более самодокументированным, обеспечить безопасность типов и диапазон допустимых значений.

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

String output = 
    dow.getDisplayName( 
        TextStyle.FULL_STANDALONE , 
        Locale.CANADA_FRENCH 
    )
;

mercredi


о java.время

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

на Joda Времени, теперь ремонт режим, советует миграцию в java.время классы.

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

вы можете обменять java.время объекты непосредственно с вашей базой данных. Используйте драйвер JDBC соответствуют JDBC 4.2 или позже. Нет нужды в струнах, нет нужды. для java.sql.* классы.

где получить java.время занятий?

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