Альтернативы Java 6 для LocalDate и DateTimeFormatter - PullRequest
0 голосов
/ 15 мая 2018

В проекте Java 8 я могу разобрать дату следующим образом:

LocalDate.parse(
    newDateString, 
    DateTimeFormatter.ofPattern(expectedDateFormat) 
)
.format(
    DateTimeFormatter.ofPattern(expectedDBDateFormat)
);

Моя проблема в том, что у меня есть проект Java 6, а LocalDate и DateTimeFormatter не определены для Java 6.

Как мне разобрать дату в моем проекте Java 6?

Ответы [ 4 ]

0 голосов
/ 15 мая 2018

java.time -API имеет backport , работающий на Java 6 или 7. Так что я думаю, что это самый простой подход с минимальным количеством изменений.

В других ответах также упоминается Joda-Time, но основным недостатком является изменение синтаксиса шаблона формата, поэтому необходимо нечто большее, чем просто изменение операторов импорта или замена конструкторов по сравнению с фабричными методами.

Наконец (для полноты), есть также моя библиотека Time4J (v3.x для Java 6), которая содержит альтернативный механизм синтаксического анализа / форматирования, основанный на классе ChronoFormatter (и эквивалентный PlainDate вместо LocalDate).

0 голосов
/ 15 мая 2018

Я хотел бы использовать Время Joda , вы можете просто внести некоторые изменения в свой код, ваш код должен выглядеть следующим образом:

LocalDate.parse(
     newDateString, DateTimeFormat.forPattern(expectedDateFormat)
).toString(DateTimeFormat.forPattern(expectedDBDateFormat));

Импорт

Импорт должен быть:

import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;

Вместо:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

Имена методов

Если вы заметили небольшие изменения:

In Java 8 Time                            In Joda Time 
ofPattern(String pattern)           =>    forPattern(String pattern)   
format(DateTimeFormatter format)    =>    toString(DateTimeFormat format)
0 голосов
/ 15 мая 2018

Существует 3 основных варианта:

  • Использование Java 6 Date и SimpleDateFormat
    Преимущество: будет работатьдля всех будущих версий Java.Нет сторонней библиотеки.
    Недостаток: API имеет недостатки, поэтому был создан Java 8 Time API (JSR-310).

    import java.text.SimpleDateFormat;
    
    new SimpleDateFormat(outputFormat).format(
        new SimpleDateFormat(inputFormat).parse(input));
    
  • Использование Joda-Time
    Преимущество: будет работать с любой версией Java.
    Недостаток: устарел, в пользу Java 8 Time API (JSR-310).

    import org.joda.time.LocalDate;
    import org.joda.time.format.DateTimeFormat;
    
    LocalDate.parse(input, DateTimeFormat.forPattern(inputFormat))
             .toString(DateTimeFormat.forPattern(outputFormat));
    
  • Использование ThreeTen-Backport (рекомендуется)
    Преимущество: в основном тот же API, что и Java 8 Time API (JSR-310).Миграция на Java 8 очень проста.
    Недостаток: Имена пакетов отличаются, и это не полная реализация JSR-310.

    import org.threeten.bp.LocalDate;
    import org.threeten.bp.format.DateTimeFormatter;
    
    LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
             .format(DateTimeFormatter.ofPattern(outputFormat));
    

Для сравнения, ваш Java8 код:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

LocalDate.parse(input, DateTimeFormatter.ofPattern(inputFormat))
         .format(DateTimeFormatter.ofPattern(outputFormat));
0 голосов
/ 15 мая 2018

В vanilla Java 6 вы можете использовать тип Date и класс SimpleDateFormat для анализа строки / форматирования представленных строк.

SimpleDateFormat parser = new SimpleDateFormat(expectedDateFormat);
Date date = parser.parse(input);
SimpleDateFormat formatter = new SimpleDateFormat(expectedDBDateFormat);
String formattedDate = formatter.format(date);

Как уже упоминалось в другихответы, оба класса имеют свои проблемы, следовательно, они заменены API-интерфейсом Date / Time начиная с Java 8. Предпочитайте один из этих параметров или, что еще лучше, избегайте хранения дат в формате строки в базе данных.

...