Как мне преобразовать мою строку даты в пользовательский формат даты? - PullRequest
0 голосов
/ 08 апреля 2019

В настоящее время я работаю над созданием пользовательского формата даты, который должен отображаться как «Понедельник, 8 апреля 2019 года». но всякий раз, когда я выбираю из диалога и применяю простой формат даты, он возвращает дату с сокращенным месяцем и временем (которые мне не нужны). Любая идея, как я могу обновить свой код, чтобы заставить его работать в вышеуказанном формате? Вот мой код:

@Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {

        String date = (++monthOfYear)+" "+dayOfMonth+", "+year;
        SimpleDateFormat dateFormat = new SimpleDateFormat("E MMM dd yyyy");
        dateFormat.format(new Date());
        Date convertedDate = new Date();
        try {
            convertedDate = dateFormat.parse(date);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        myDate.setText(convertedDate.toString());
    }

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Чтобы достичь такого формата: Monday, April 8, 2019 вам нужно отформатировать дату следующим образом (источник) :

SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
myDate.setText(mDateFormat.format(convertedDate));

Удачи


Я бы сделал что-то вроде этого:

@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
    Calendar mDate = Calendar.getInstance();
    mDate.set(year, monthOfYear, dayOfMonth);
    SimpleDateFormat mDateFormat = new SimpleDateFormat("EEEE, MMMMM dd, yyyy");
    myDate.setText(mDateFormat.format(mDate.getTime()));
}
0 голосов
/ 09 апреля 2019

java.time и ThreeTenABP

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
            .withLocale(Locale.US);
    LocalDate date = LocalDate.of(year, ++monthOfYear, dayOfMonth);
    String formattedDate = date.format(dateFormatter);

Понедельник, 8 апреля 2019 г.

Не беспокойтесь об определении собственного формата даты через строку шаблона формата,Требуемый формат уже встроен.

Я использую java.time, современный Java-интерфейс даты и времени.Позиции даты / времени, которые вы пытались использовать, SimpleDateFormat и Date, давно устарели и плохо разработаны, первые, в частности, печально известны своими хлопотами, поэтому я не хотел их использовать.

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

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

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

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

  • Сначала вы собираете входящие year, monthOfYear и dayOfMonth в строку, которую вы пытаетесь проанализировать, что является обходным путем, но, что еще хуже, строка не имеет формата E MMM dd yyyy, поэтому ее синтаксический анализ с SimpleDateFormat, вероятно, не удался.Если вы не видели трассировку стека из e.printStackTrace();, я полагаю, что у вас есть серьезная проблема в настройке вашего проекта, которую вы должны исправить перед написанием другой строки кода.Если вы не видите ошибок, которые происходят в вашем коде, вы кодируете с завязанными глазами.Ошибка разбора привела к отображению текущей даты, полученной из new Date().
  • convertedDate.toString() возвращает строку в формате EEE MMM dd HH:mm:ss zzz yyyy для отображения.Например Tue Apr 09 09:39:47 EDT 2019.Date.toString всегда возвращает этот формат.Он не имеет ничего общего с форматом, из которого была проанализирована дата (даже если она была успешно проанализирована), поскольку Date - это просто момент времени, в нем не может быть формата.

Ссылки

...