2016-08-31 3 views
-1

У меня есть строка даты, которая имеет нестандартный формат GMT, например «2016-08-31T02: 04: 58.893GMT». Теперь мне нужно перенести его в формат локального времени, например «2016-08-31 10:04:58». Кстати, я в Китае, между Местным временем и GMT время 8 часов. О, я использую Java. Благодарю всех.Как перенести GMT на локальную дату

ответ

-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