Получить день недели из 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";
}
Ответы
Ответ 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
и т.д.