Java: конвертировать дату 2011-январь-01 в формат дд-мм-гггг - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно преобразовать дату (2011-янв-01) в любой из простейших форматов.

Конструктор eclipse использует Java 7.

    String pDate = obj.getJSONArray("product").getJSONObject(i).getString("createdDate");
    //"2011-Jan-01" - date format.
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    try {
        Date fDate = format.parse(pDate);
        System.out.println("jsonDate: " + fDate);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("pDate: " + pDate);//"2011-Jan-01"


            errors:
            error:java.text.ParseException:Unparseable date:"2011-Jan-01"
            error: at java.text.DateFormat.parse(DateFormat.java:348)

Я получаю ошибки выше.

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Ваш формат анализа не должен включать время (потому что вы вводите только дату), и вам нужен другой вызов формата для получения желаемого результата. Что-то вроде

String pDate = "2011-Jan-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd");
try {
    Date fDate = format.parse(pDate);
    System.out.println(new SimpleDateFormat("dd-MM-yyyy").format(fDate));
} catch (ParseException e) {
    e.printStackTrace();
}

, который выводит

01-01-2011
1 голос
/ 10 октября 2019

java.time и ThreeTen Backport

Это работает на Java 7 (подробности ниже):

    DateTimeFormatter jsonDateFormatter = DateTimeFormatter.ofPattern("uuuu-MMM-dd", Locale.ENGLISH);
    DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");

    String pDate = "2011-Jan-01";
    LocalDate fDate = LocalDate.parse(pDate, jsonDateFormatter);
    pDate = fDate.format(outputDateFormatter);

    System.out.println("Formatted date: " + pDate);

Вывод из фрагмента:

Отформатировандата: 01-01-2011

Если у вас нет веских причин не делать этого, я рекомендую использовать один из встроенных форматов Java для локали вашего пользователя, а не жестко кодировать выходной формат. Например:

    DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
            .withLocale(Locale.UK);

Теперь вывод:

Форматированная дата: 01-янв-2011

Вопрос: почему java.time?

Старые классы datetime, которые вы пытались использовать в этом вопросе, Date и SimpleDateFormat плохо разработаны, последние печально известны своими проблемами. К счастью, они также давно устарели. java.time, современный Java-интерфейс даты и времени, гораздо приятнее работать.

Вопрос: Могу ли я использовать java.time в Java 7? Как?

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

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

Ссылки

0 голосов
/ 10 октября 2019

Изменить SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); на SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd");

...