Это уже освещалось бесчисленное количество раз. Так что поиск переполнения стека для получения дополнительной информации.
Никогда не используйте Date
или Calendar
. Используйте только java.time . Аналогично, Joda-Time также вытесняется java.time (оба возглавляются одним и тем же человеком, Стивеном Коулборном).
Оба ваших строковых ввода имеют стандартный формат ISO 8601. Классы java.time по умолчанию используют эти форматы при разборе / генерации строк.
В первом отсутствует индикатор смещения от UTC или часового пояса, поэтому не представляет момент.
LocalDateTime.parse( "2018-07-21T00:50:39" )
Второй в Z
, что означает UTC, и произносится как «Зулу».
Instant.parse( "2017-11-20T23:18:27.529Z" )
Чтобы обработать оба формата в одном методе, найдите во входной строке наличие Z
и ответвления соответственно. Кроме того, ловушка для исключения в случае, если вы получаете неожиданные входные данные
Если у вас должен быть объект java.util.Date
, посмотрите этот класс JavaDoc для новых методов from
& amp; to…
на старых классах, которые конвертируют в / из java.time классов. Как я уже сказал, все это было освещено много раз, поэтому ищите больше информации.