У меня есть строка даты, которая имеет нестандартный формат GMT, например «2016-08-31T02: 04: 58.893GMT». Теперь мне нужно перенести его в формат локального времени, например «2016-08-31 10:04:58». Кстати, я в Китае, между Местным временем и GMT время 8 часов. О, я использую Java. Благодарю всех.Как перенести GMT на локальную дату
-1
A
ответ
-1
Лучше преобразовать нестандартный формат GMT в стандартный формат времени, а затем использовать некоторую встроенную функцию для добавления или вычитания разницы. Вы можете использовать другую функцию для преобразования стандартного формата времени в указанный формат.
Это будет здорово, потому что вам не нужно рассматривать сложные случаи, например, «2016-12-31 23:00» + 8 часов.
1
Вы разбираете строку, используя DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz")
.
Пример кода, показывающий промежуточные результаты:
String input = "2016-08-31T02:04:58.893GMT";
DateTimeFormatter fmt1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");
ZonedDateTime zdtGMT = ZonedDateTime.parse(input, fmt1);
System.out.println(zdtGMT); // prints 2016-08-31T02:04:58.893Z[GMT]
ZonedDateTime zdtChina = zdtGMT.withZoneSameInstant(ZoneId.of("Asia/Shanghai"));
System.out.println(zdtChina); // prints 2016-08-31T10:04:58.893+08:00[Asia/Shanghai]
LocalDateTime ldt = zdtChina.toLocalDateTime();
System.out.println(ldt); // prints 2016-08-31T10:04:58.893
DateTimeFormatter fmt2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(ldt.format(fmt2)); // prints 2016-08-31 10:04:58