2016-08-31 2 views
-1

「2016-08-31T02:04:58.893GMT」のような非標準のGMT形式を持つ日付の文字列を取得しました。 "2016-08-31 10:04:58"のような現地時間形式に転送する必要があります。ちなみに、私は中国にいるので、現地時間とGMT時間の間に8時間あります。 ああ、Javaを使用しています。みなさんありがとう。GMT日付をローカル日付に転送する方法

答えて

-1

非標準のGMT形式を標準の時刻形式に変換し、適切な組み込み関数を使用して差分を加算または減算する方がよいでしょう。別の関数を使用して、標準の時刻形式を指定された形式に変換することができます。

「2016-12-31 23:00」+ 8hrsなどの複雑なケースを考慮する必要がないので、これは素晴らしいことです。

1

​​を使用して文字列を解析します。示す

例コード、中間結果:

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 
関連する問題