Подтвердить что ты не робот

Получить день недели из 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";
    }
4b9b3361

Ответ 1

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

Ответ 2

Joda времени

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

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

или

DateTime date = DateTime().now();

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

date.getDayOfWeek();

День недели (короткая строка) с использованием toString() и DateTimeFormat options:

date.toString("EE");

Ответ 3

TL;DR

myGregCal.toZonedDateTime().getDayOfWeek().getDisplayName( TextStyle.SHORT , Locale.US ) 

java.time

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

ZonedDateTime zdt = myGregCal.toZonedDateTime();

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

DayOfWeek dow = zdt.getDayOfWeek();

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

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

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

О java.time

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

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

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений.

Большая часть функциональных возможностей java.time обратно переносится на Java 6 и 7 в ThreeTen-Backport и далее адаптируется к Android в ThreeTenABP.

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