Получить день недели от GregorianCalendar - PullRequest
20 голосов
/ 23 сентября 2011

У меня есть дата, и мне нужно знать день недели, поэтому я использовал объект 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 ]

13 голосов
/ 22 января 2013
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);
3 голосов
/ 16 апреля 2012

Joda-Time

Я использую Joda-Time библиотека для всех операций, связанных с датой / временем.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");
0 голосов
/ 18 августа 2016

ТЛ; др

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.time

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

ZonedDateTime zdt = myGregCal.toZonedDateTime();

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

DayOfWeek dow = zdt.getDayOfWeek();

dow.toString (): СРЕДА

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

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

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

MERCREDI


О java.time

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

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

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

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

Где взять классы java.time?

...