Получить название дня из полного календарного формата даты - PullRequest
0 голосов
/ 29 января 2019

Как получить имя имени, например, (среда - четверг) из этого формата даты «ср. 30 января 00:00:00 GMT + 02: 00 2019»

Ответы [ 4 ]

0 голосов
/ 30 января 2019

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 с подпакетами.

Ссылки

0 голосов
/ 29 января 2019

Сначала вам нужно будет проанализировать String в Calendar объект, используя SimpleDateFormat:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
try {
    cal.setTime(sdf.parse("Wed Jan 30 00:00:00 GMT+02:00 2019"));
} catch (ParseException e) {
    // Log invalid date format
}

Затем извлечь день из вашего Calendar объекта:

String day = cal.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG,Locale.ENGLISH);
0 голосов
/ 29 января 2019

## Здесь я прикрепил метод, который даст вам ожидаемый результат ##

public void dayName(){
    String weekDay,time;
    SimpleDateFormat dayFormat = new SimpleDateFormat("EEEE MMM dd HH:mm", Locale.US);
    SimpleDateFormat dayFormat1 = new SimpleDateFormat("hh:mm yyyy", Locale.US);
    dayFormat.setTimeZone(TimeZone.getTimeZone("ITC"));
    dayFormat1.setTimeZone(TimeZone.getTimeZone("GMT"));
        Calendar calendar = Calendar.getInstance();
        weekDay = dayFormat.format(calendar.getTime());
        time=dayFormat1.format(calendar.getTime());
        Log.e(TAG, "dayName: "+weekDay+" GMT+"+time );// out put looks like : Tuesday Jan 29 17:58 GMT+05:58 2019

}
  • Я использовал два TimeZone: ITC и GMT
0 голосов
/ 29 января 2019

Вы можете использовать SimpleDateFormat для него, и часть формата, которая дает вам полное название дня, - EEEE.Надеюсь, это поможет!

...