Поскольку ваша строка содержит смещение, а часовой пояс отсутствует, для чего вам нужен ZonedDateTime
? OffsetDateTime
более уместно.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
"EEE MMM dd yyyy HH:mm:ss 'GMT'xx", Locale.ROOT);
String a = "Tue Apr 09 2019 12:59:51 GMT+0300";
System.out.println(OffsetDateTime.parse(a, dtf));
2019-04-09T12: 59: 51 + 03: 00
Часовой пояс - это место на земле, которое охватывает исторические и известные будущие изменения смещения UTC в этом месте. Часовой пояс обычно задается в формате регион / город , например Азия / Рангун.
Редактировать
Я использую ZonedDateTime, потому что я использую часовой пояс в своем приложении.
Я не совсем уверен, что вы имеете в виду. Может быть, вы заранее решили, какой часовой пояс вы используете? Например:
ZoneId zone = ZoneId.of("Europe/Zaporozhye");
OffsetDateTime odt = OffsetDateTime.parse(a, dtf);
ZonedDateTime zdt = odt.atZoneSameInstant(zone);
System.out.println(zdt);
2019-04-09T12: 59: 51 + 03: 00 [Европа / Запорожье]
Если по какой-то причине вы хотите считать GMT + 0300 часовым поясом, хотя это не так, анализ, который я показал вначале, тоже работает с ZonedDateTime
:
System.out.println(ZonedDateTime.parse(a, dtf));
2019-04-09T12: 59: 51 + 03: 00