2016-10-14 3 views
0

Мне нужно преобразовать строку даты в другой конкретный формат.Конвертировать дату в формате «yyyy-mm-ddTHH: MM: SS +/- 0000» в «yyyy-mm-ddTHH: MM: SSZ»

Например: У меня есть дата, которая может быть как YYYY-MM-DD или YYYY-MM-DDThh:mm:ss±0000, и мне нужно ее перевести на что-то "yyyy-mm-ddTHH:MM:SSZ".

Я пробовал несколько вещей, используя Java 8 API, но не смог найти выход.

+1

Пожалуйста, дайте несколько примеров входов и выходов. –

+1

Можете ли вы поместить свой код, который имеет проблемы? – Ammad

+1

Вот общее решение: [Как преобразовать дату из одного формата в другой объект даты в другом формате без использования устаревших классов?] (Http://stackoverflow.com/a/12503542). Теперь попробуйте указать, какая именно проблема останавливает вас от ее использования. Вы получаете ошибки компиляции, исключения времени выполнения, неправильные результаты или некоторые другие проблемы? – Pshemo

ответ

3

Попробуйте (Java 8):

String input = "2016-10-14T14:19:40-04:00"; 
String output = ZonedDateTime.parse(input).toInstant().toString(); 
System.out.println(output); // prints 2016-10-14T18:19:40Z 

Это работает, потому что основной формат ZonedDateTime используется parse() является ISO_ZONED_DATE_TIME, поэтому он будет анализировать ввод в формате, который вы описали.

Выбранный выходной формат является форматом по умолчанию Instant, который возвращается его методом toString(), то есть ISO_INSTANT.

Преобразование между двумя (ZonedDateTime в Instant с использованием метода toInstant()) будет выполнять необходимую настройку часового пояса.

+1

Хороший ответ, но более подходящий для использования 'OffsetDateTime', а не' ZonedDateTime' для ввода, который имеет только смещение и никакой информации о часовом поясе. –

0

Попробуйте это:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); // or "YYYY-MM-DDThh:mm:ss±0000" 
String dateInString = "1993-11-27"; 
Date date = inputFormat.parse(dateInString); 

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ssZ"); 
System.out.println(outputFormat.format(date)); 
+0

В этом ответе используются трудоемкие старые классы времени, которые теперь вытесняются классами java.time. См. [Ответ Андреаса] (http://stackoverflow.com/a/40049730/642706) для современного решения. –

Смежные вопросы