Как преобразовать формат даты "гггг-ММ-дд'ТЧЧ: мм: сс.SSSXXX" в простой для Android?

java android json date datetime-parsing

11923 просмотра

3 ответа

Как я могу разобрать эту дату 2018-01-09T11:11:02.0+03:00для dd.MM.yyyy hh:mmформатирования в Android?

А что Tмежду 09и что 11значит? Благодарю.

Я не знаю, как бэкэнд-разработчик получил этот формат. Я использую Java.

Автор: picKit Источник Размещён: 12.11.2019 09:03

Ответы (3)


1 плюс

Решение

Если вы используете Java, вы можете использовать SimpeDateFormatс шаблонами:

        String date = "2018-01-09T11:11:02.0+03:00";
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
        SimpleDateFormat output = new SimpleDateFormat("dd.MM.yyyy hh:mm");
        Date d = null;
        try {
            d = dateformat.parse(date /*your date as String*/);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        String formattedDate = output.format(d);

        Log.d("Date format", "output date :" + formattedDate);

Выход:

D / Формат даты: дата выхода: 09.01.2018 09:11

РЕДАКТИРОВАТЬ: Благодаря @ OleV.V., Для API> 26, или используя ThreeTenABP мы можем использовать

DateTimeFormatter , мы можем сделать что-то подобное

    String date = "2018-01-09T11:11:02.0+03:00";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    DateTimeFormatter formatterOut = DateTimeFormatter.ofPattern("dd.MM.yyyy hh:mm");
    LocalDate parsedDate = LocalDate.parse(date, formatter);

    String formattedDate = formatterOut.format(parsedDate);
    Log.d("Date format", "output date :" + formattedDate);
Автор: E.Abdel Размещён: 16.05.2018 10:48

2 плюса

    DateTimeFormatter desiredFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm");

    String backendDateTimeString = "2018-01-09T11:11:02.0+03:00";
    OffsetDateTime dateTime = OffsetDateTime.parse(backendDateTimeString);
    String presentationDateTimeString = dateTime.format(desiredFormatter);
    System.out.println(presentationDateTimeString);

Это печатает:

09.01.2018 11:11

Обратите внимание: я использую прописные буквы HHв строке шаблона формата. Это указывает на час дня с 00 до 23. В вопросе вы использовали строчные буквы hh, которые в строке шаблона формата означают часы с AM или PM от 01 до 12, поэтому 00:33 будут выглядеть как 12:33 и 15:47 как 3:47. Я не думал, что ты это намеревался.

Формат, который получил ваш бэкэнд-разработчик 2018-01-09T11:11:02.0+03:00, - ISO 8601. Он широко распространен и является международным стандартом, поэтому хорошо, что он / она получил это. Смешное Tв середине указывает начало части времени, чтобы отделить ее от части даты. Метод one-arg OffsetDateTime.parseанализирует ISO 8601, поэтому нам не понадобился никакой форматер для анализа. OffsetDateTimeи DateTimeFormatterявляются классами из java.timeсовременного API даты и времени Java.

Вопрос: Могу ли я использовать java.time на Android?

Да, java.timeпрекрасно работает на старых и новых устройствах Android. Это просто требует как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых устройствах Android (уровень API 26 и выше) встроен современный API.
  • В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
  • На (более старом) Android используйте Android-версию ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bpподпакетов (мой код был протестирован с этими импортами).

связи

Автор: Ole V.V. Размещён: 17.05.2018 06:32

1 плюс

Вы можете сделать это с SimpleDateFormat .

Вот проверенный пример на Java:

String dateString = "2018-01-09T11:11:02.0+03:00";

String inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String outPattern = "dd.MM.yyyy hh:mm";

SimpleDateFormat inFormat = new SimpleDateFormat(inPattern, Locale.getDefault());
SimpleDateFormat outFormat = new SimpleDateFormat(outPattern, Locale.getDefault());

try {
    Date inDate = inFormat.parse(dateString);
    String outDate = outFormat.format(inDate);
    Log.e("TEST", outDate);
} catch (ParseException e) {
    e.printStackTrace();
}

Вот проверенный пример в Котлине :

val dateString = "2018-01-09T11:11:02.0+03:00"

val inPattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
val outPattern = "dd.MM.yyyy hh:mm"

val inFormat = SimpleDateFormat(inPattern, Locale.getDefault())
val outFormat = SimpleDateFormat(outPattern, Locale.getDefault())

val inDate = inFormat.parse(dateString)
val outDate = outFormat.format(inDate)

Log.e("TEST", outDate)
Автор: Anthony Cannon Размещён: 16.05.2018 10:39
Вопросы из категории :
32x32