Изменение формата даты для диапазона дат программно - PullRequest
0 голосов
/ 11 июня 2018

У меня есть приложение, в котором я хочу изменить формат даты в «С» и «Кому».

Предположим, у меня есть диапазон дат, например 2018-06-11 - 2018-06-14.Теперь я хочу изменить его в каком-то другом формате как 11 June, 2018 - 14 June, 2018.

Пожалуйста, обратитесь к приведенному ниже коду, я пробовал:

        String strDate = "2018-06-11 - 2018-06-14";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = format.parse(strDate);
            format = new SimpleDateFormat("dd MMMM, yyyy");
            String strFinalDate = format.format(date);
            tv4.setText(strFinalDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

Кроме того, я также попробовал следующий код:

        String strDate = "2018-06-11 - 2018-06-14";
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd - yyyy-MM-dd");
        try {
            Date date = format.parse(strDate);
            format = new SimpleDateFormat("dd MMMM, yyyy - dd MMMM, yyyy");
            String strFinalDate = format.format(date);
            tv4.setText(strFinalDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

Во-первых, набор кодов работаетплавно, но конвертирует только «От» и даже не проверяет дату «До».И второй набор кода возвращает ошибку, которая говорит: java.text.ParseException: Unparseable date: "2017-01-11 - 2017-01-14

Я что-нибудь пропустил в этом коде?

Пожалуйста, сообщите мне, если у меня есть.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я предлагаю

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    String strDate = "2018-06-11 - 2018-06-14";
    String[] strDates = strDate.split(" - ");
    if (strDates.length != 2) {
        throw new IllegalStateException("Wrong range format " + strDate 
                + ", must be yyyy-MM-dd - yyyy-MM-dd");
    }
    String strFinalDate = LocalDate.parse(strDates[0]).format(dateFormatter)
            + " - " + LocalDate.parse(strDates[1]).format(dateFormatter);
    System.out.println(strFinalDate);

Вывод на моем Java с английским языком в США:

11 июня 2018 - 14 июня 2018

Вы надеваетезапятую после «июня», потому что это не считается стандартом, поэтому подумайте, не является ли это действительно преимуществом.Вывод будет зависеть от настроек локали, что также может быть преимуществом.Или укажите явный языковой стандарт, например:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG)
            .withLocale(Locale.UK);

Я использую и рекомендую java.time, современный Java-интерфейс даты и времени.

Что пошло не так в вашем коде?

Независимо от того, используете ли вы устаревший Date или современный LocalDate, такой объект может содержать только одну дату, а не диапазон дат.В вашей первой попытке SimpleDateFormat проанализировал первую дату (так как она соответствовала вашему шаблону), а затем проигнорировал остаток строки.Поэтому, когда вы форматируете проанализированную дату, вы получите

11 июня 2018

В вашей секунде попытки обе даты были проанализированы, но в один и тот же объект Date,поэтому были сохранены только значения второй даты.При печати даты ее значения также печатались дважды, поскольку шаблон форматирования содержит формат дважды:

14 июня 2018 г. - 14 июня 2018 г.

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

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

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

Ссылки

0 голосов
/ 11 июня 2018

Как я уже говорил в моем комментарии выше, вы должны разделить вашу strDate String на две разные String переменные.Посмотрите на код ниже

    String strDate = "2018-06-11 - 2018-06-14";
    String[] fromToDatesStr = strDate.split(" - ");
    String fromDateStr = fromToDatesStr[0];
    String toDateStr = fromToDatesStr[1];
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date fromDate = null;
    Date toDate = null;
    try {
        fromDate = format.parse(fromDateStr);
        toDate = format.parse(toDateStr);
        format = new SimpleDateFormat("dd MMMM, yyyy");
        String strFromFinalDate = format.format(fromDate);
        String strToFinalDate = format.format(toDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }

String strFromFinalDate и String strToFinalDate теперь содержат даты, отформатированные по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...