Получить день недели от 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
- более поздние версии Android bundle реализации java.время классы.
- для более раннего Android (ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....
 
