Java SWT DateTime: определить день недели

У меня есть виджет DateTime с 09.03.2017. Основываясь на документации для DateTime, я не вижу способа определить день недели. В конечном итоге мне понадобится строка, проанализированная в этом формате «Среда, 22 февраля, 14:57:34 UTC 2017» из виджета DateTime, но первый шаг — получить день недели. Есть ли способ сделать это за пределами моей собственной функции? И если нет, то что бы вы порекомендовали в качестве наилучшего подхода к функции, поскольку дни недели не соответствуют датам из года в год?

Дайте мне знать, если вам нужна дополнительная информация.

Спасибо!


person Sarah    schedule 09.03.2017    source источник
comment
java.time.LocalDateTime предоставляет getDayOfWeek метод.   -  person Mena    schedule 09.03.2017
comment
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleDateFormat теперь являются устаревшими, вытесненными java.time классы, встроенные в Java 8 и Java 9 . См. Учебник от Oracle.   -  person Basil Bourque    schedule 05.03.2018


Ответы (2)


Используйте 1_:

    Calendar c = Calendar.getInstance();
    c.setTime(yourDate);
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
  • если вам нужно, чтобы вывод был Tue, а не 3 (дни недели индексируются, начиная с 1), вместо просмотра календаря просто переформатируйте строку: new SimpleDateFormat("EE").format(date) (EE означает «день недели, короткая версия»)

Документация

person Ocean15    schedule 09.03.2017
comment
Ммкей, да, я думаю, это сработает. Мой мозг пукнул, и изначально я не думал, что этот подход будет жизнеспособным, но я думаю, что это будет хорошо для меня. Я приму ответ и закрою вопрос, как только система разрешит. Спасибо! - person Sarah; 09.03.2017
comment
К вашему сведению, неприятные старые классы даты и времени, такие как java.util.Date , java.util.Calendar и java.text.SimpleDateFormat теперь являются устаревшими, вытесненными java.time классы, встроенные в Java 8 и Java 9 . См. Учебник от Oracle. - person Basil Bourque; 06.03.2018

tl;dr

LocalDate.of( 2017 , Month.MARCH , 9 )
    .getDayOfWeek()
    .getDisplayName( TextStyle.FULL , Locale.ITALY )

Or…

OffsetDateTime.now( ZoneOffset.UTC )
    .format( DateTimeFormatter.RFC_1123_DATE_TIME )

Java.время

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

Перечисление DayOfWeek определяет семь объектов, по одному на каждый день недели, с понедельника по воскресенье.

Класс LocalDate представляет значение без времени суток и без часового пояса.

DayOfWeek dow = LocalDate.now().getDayOfWeek() ;

Сгенерируйте строку локализованного имени.

String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;  // Or Locale.US etc.

Чтобы на мгновение сгенерировать более длинную строку, используйте DateTimeFormatter для указания пользовательского шаблона, используйте встроенный шаблон или выполните автоматическую локализацию.

String output = OffsetDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.RFC_1123_DATE_TIME ) ;

О java.time

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

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

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

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

Где получить классы java.time?

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

person Basil Bourque    schedule 05.03.2018