Я уже проголосовал за ответ Брайана именно потому, что он включает и рекомендует решение java.time
. Однако мне нужно добавить несколько мыслей.
Ваш код, reviloSlater, выбрасывает информацию о часовом поясе (точнее, информацию о смещении зоны), я не уверен, что осмелился бы сделать это с самого начала. С классами java.time
более естественно включать его, и его легко отбросить позже, когда мы уверены, что он нам не нужен.
Для разбора со смещением:
OffsetDateTime loginOdt = OffsetDateTime.parse("2017-05-16 06:24:36-0700",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ"));
Удаление информации о смещении часового пояса
LocalDateTime loginLdt = loginOdt.toLocalDateTime();
LocalDateTime
— это дата и время без какой-либо информации о часовом поясе или смещении. В этом случае, конечно, мы получаем
2017-05-16T06:24:36
Код Брайана java.time
также использует информацию о смещении часового пояса из строки. Редактировать: после редактирования Брайаном этот код теперь работает и дает нам:
2017-05-16T13:24:36Z
Это тот же момент времени (Instant.toString()
печатает время в формате UTC). Другой способ: с OffsetDateTime
до того, как мы можем просто сделать
Instant login = loginOdt.toInstant();
java.time
загружается с возможностями.
person
Ole V.V.
schedule
16.05.2017
SimpleDateFormat.parse()
с одним аргументом игнорирует любые лишние символы в конце строки, например ваш часовой пояс. Поэтому я сомневаюсь, что его наличие является вашей проблемой. - person Ole V.V.   schedule 16.05.2017