Парсинг и изменение даты в кастомном формате

164
23 декабря 2018, 08:50

Есть строка с датой и времнем в определенном формате

String date = "Tue Sep 11 08:28:59 EDT 2018";

На выходе хочу получить

11.09.2018 08:28

Но получаю

10.09.2018 15:28

Формат

"EEE MMM d HH:mm:ss z yyyy"

Хочу запарсить дату и вывести ее в другом формате

"dd.MM.yyyy HH:mm"

Моя реализация

public static String getTime(String time, String inFormat, String outFormat) throws ParseException {
    Date date = new Date();
    SimpleDateFormat simpleFormet = new SimpleDateFormat(inFormat); 
    SimpleDateFormat simpleFormet2 = new SimpleDateFormat(outFormat); 
    date = simpleFormet.parse(time)
    return simpleFormet2.format(date);
}

Проблема в том что время всегда сбрасывается на текущее, подскажите как правильно сделать

Answer 1

Фокус в том, что ваше время Tue Sep 11 08:28:59 EDT 2018 указано для часового пояса EDT, т.е. UTC-4, а объект Date хранит время по Гринвичу. Соответственно строка

simpleFormet2.format(date);

и дает время на 4 часа больше (а не текущее), чем было передано.

В Java8 появилась новая библиотека для работы со временем java.time. В ней есть класс LocalDateTime который хранит дату вместе с часовым поясом.

Использование:

public static String getTime2(String time, String inFormat, String outFormat) {
    DateTimeFormatter simpleFormet = DateTimeFormatter.ofPattern(inFormat); 
    DateTimeFormatter simpleFormet2 = DateTimeFormatter.ofPattern(outFormat); 
    LocalDateTime date = LocalDateTime.parse(time, simpleFormet);
    return date.format(simpleFormet2);
}
Answer 2

Чтобы дата и время были такими же как изначально, нужно получить значение z в исходной строке. Это можно делать разными способами, в том числе используя Joda DateTime.

String timeZone = date.substring(20,3);
if ("EDT".equals(timeZone)) timeZone = "GMT-4";
simpleFormet2.setTimeZone(TimeZone.getTimeZone(timeZone)); 
READ ALSO
Пример Spring Boot programmatic transaction, spring data jpa

Пример Spring Boot programmatic transaction, spring data jpa

Ищу пример реализации программного управления транзакциями в Spring Boot и Spring Data JPAВезде только для spring framework

168
Неясный стек исключений в приложении javaFx

Неясный стек исключений в приложении javaFx

Коллеги, добрый день! Вот такой стек исключения выдается при запуске собранного мавеном джарника моего приложения:

169
Задача с базой данных (про игру)

Задача с базой данных (про игру)

Попытка объяснить технически:

166
Вывести список ближайших дат

Вывести список ближайших дат

Есть список имен и дней рожденияНужно получить список имен, у которых в ближайшие две недели будет день рождения, используя (желательно) java

178