java.time
Кажется, что у вас есть экземпляр класса java.util.Date
.Это плохо спроектированный класс, который давно устарел, поэтому прежде всего стоит посмотреть, сможете ли вы избежать этого и получить вместо него экземпляр класса из java.time, современного Java-API даты и времени.
Однако, если вы получили Date
от унаследованного API, который вы не можете изменить или не хотите менять прямо сейчас, в первую очередь необходимо преобразовать его в современный Instant
, а затем выполнить дальнейшие преобразования оттуда.В следующем фрагменте используется ThreeTenABP, подробнее об этом ниже.
Date yourOldfashionedDate = getFromLegacyApi();
Instant modernInstant = DateTimeUtils.toInstant(yourOldfashionedDate);
String dayName = modernInstant.atZone(ZoneId.systemDefault())
.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
System.out.println("Day name is " + dayName);
Вывод с учетом даты из вашего вопроса:
Название дня - среда
Если вы получили String
(возможно, строку, возвращаемую из Date.toString
в какой-то момент), вам нужно сначала проанализировать ее:
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
String dateString = "Wed Jan 30 00:00:00 GMT+02:00 2019";
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, dateFormatter);
String dayName = dateTime.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
Вы видите, что последний бит точно такой же, как и раньше.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (начиная с уровня API 26) современный встроенный API.Только в этом случае используйте
yourOldfashionedDate.toInstant()
вместо DateTimeUtils.toInstant(yourOldfashionedDate)
. - В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На более старых версиях Android используется Android-версия ThreeTen Backport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки