Есть ли формат даты для отображения дня недели в Java?

128

Я знаю такие форматы даты, как -
"yyyy-mm-dd"который отображает дату в формате - 2011-02-26
"yyyy-MMM-dd"который отображает дату в формате2011-FEB-26

для использования, например:

SimpleDateFormat formatter = new SimpleDateFormat(
                "yyyy/MMM/dd ");

Мне нужен формат, который поможет мне отображать день недели 2011-02-MONили что-то в этом роде. Я просто хочу, чтобы день недели отображался символами с месяцем и годом. Вы можете мне рассказать о таком формате?

rogerstone
источник
1
Как насчет того, чтобы просто использовать ddкак формат?
Johan Sjöberg
3
Я уверен, что документы API ( download.oracle.com/javase/1.4.2/docs/api/java/text/… ) будут рады предоставить вам ответ.
М. Джессап
1
что значит "день" - день недели, день месяца. В вашем примере отображается вся дата. Пожалуйста, покажите точный ввод и вывод, который вы хотите.
Bozho
2
В качестве общего совета лучше использовать -обозначение только с датами в формате ISO (т.е. год-месяц-день). Тире было выбрано там, так как в то время оно не использовалось ни в каких других форматах даты, чтобы избежать путаницы, и теперь каждый использует свой собственный порядок с тире ...
Паоло Эберманн

Ответы:

322

Это должно отобразить «Вт»:

new SimpleDateFormat("EEE").format(new Date());

Это должно отобразить "вторник":

new SimpleDateFormat("EEEE").format(new Date());

Это должно отобразить "T":

new SimpleDateFormat("EEEEE").format(new Date());

Итак, ваш конкретный пример:

new SimpleDateFormat("yyyy-MM-EEE").format(new Date());
Натан Фегер
источник
5
Красивое решение! Я искал: понедельник, 04.04.2016. Так что в моем случае, new SimpleDateFormat("EEEE, dd/MM/yyyy");если это кому-то поможет в будущем.
AuroMetal 01
1
ОК, работает. EEEEотображает полные названия дня недели - например, «понедельник», «вторник» и т. д.
kosiara - Bartosz Kosarzycki
Я действительно не думал, что этот сайт вообще будет где-то рядом, не говоря уже о том, чтобы Java наконец-то добралась до даты выхода. Технически он отвечает на вопрос OP. Тем не менее, я, вероятно, смогу добавить новый раздел о том, как работает новый материал java.time
Натан Фегер
18

Ага - 'E' делает свое дело

http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-E");
System.out.println(df.format(date));
Инструментарий
источник
5
видеть оракул в URL-адресе javadocs все еще кажется странным.
Натан Фегер
Мы также используем: DateFormat df = new SimpleDateFormat("yyyy-MM-EEEEEEE");для отображения длинного DayOfWeek.
Do Nhu Vy
4
SimpleDateFormat sdf=new SimpleDateFormat("EEE");

EEE обозначает день недели, например, четверг отображается как Thu.

user2824143
источник
3

ТЛ; др

LocalDate.of( 2018 , Month.JANUARY , 23 )
         .format( DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US )  )

java.time

Современный подход использует классы java.time.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;

Обратите внимание, как мы указываем Localeтакой, Locale.CANADA_FRENCHчтобы определить человеческий язык, на котором переводится название дня.

DateTimeFormatter f = DateTimeFormatter.ofPattern( uuuu-MM-EEE , Locale.US ) ;
String output = ld.format( f ) ;

ISO 8601

Кстати, вы можете быть заинтересованы в стандарте ISO 8601 неделя схемы нумерации: yyyy-Www-d.

2018-W01-2

На неделе №1 первый четверг календарного года. Неделя начинается в понедельник. В году 52 или 53 недели. Последние / первые несколько дней календарного года могут приходиться на следующий / предыдущий недельный год.

Единственная цифра в конце - день недели, 1-7 - с понедельника по воскресенье.

Добавьте класс библиотеки ThreeTen-Extra в свой проект для этого YearWeekкласса.


О java.time

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

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

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

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

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

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

Василий Бурк
источник
2

Я знаю, что вопрос заключается в том, чтобы получить день недели в виде строки (например, краткое имя), но для всех, кто ищет числовой день недели (как и я), вы можете использовать новую строку формата «u», поддерживаемую начиная с Java 7. Например:

new SimpleDateFormat("u").format(new Date());

возвращает сегодняшний индекс дня недели, а именно: 1 = понедельник, 2 = вторник, ..., 7 = воскресенье.

Сэл Боррелли
источник