あまりスマートには書けませんでした。
以下、日時gmtDate
をjava.sql.Timestamp
型で取得している前提で説明します。
日時データには、2016-05-18 01:23:45
(GMT)がセットされているものとします。
GMTをセットしたフォーマッターでjava.sql.Timestamp
の値を文字列としてパースさせることで、JSTに変換しています。
lang
1// import java.text.*;
2// import java.util.*;
3
4System.out.println("class of gmtDate=" + gmtDate.getClass()); // class java.sql.Timestamp
5System.out.println("gmtDate=" + gmtDate); // 2016-05-18 01:23:45.0
6
7DateFormat dfGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
8dfGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
9Date jstDate = dfGmt.parse(gmtDate.toString());
10System.out.println("jstDate=" + jstDate); // Wed May 18 10:23:45 JST 2016
11DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssZ");
12String jstDateString = df.format(jstDate);
13System.out.println("jstDateString=" + jstDateString); // 20160518102345+0900
DateTime APIを使用するバージョンです。
java.sql.Timestamp
の固有メソッドであるtoLocalDateTime
を使って一旦LocalDateTime
に変換し、そこからタイムゾーンを付加します。GMTのZonedDateTime
をwithZoneSameInstant
メソッドでJSTのZonedDateTime
に変換します。
lang
1// import java.sql.Timestamp;
2// import java.time.*;
3// import java.time.format.DateTimeFormatter;
4
5System.out.println(gmtDate); // 2016-05-18 01:23:45.0
6
7Timestamp ts = (Timestamp)gmtDate;
8LocalDateTime gmtLdt = ts.toLocalDateTime();
9ZonedDateTime gmtZdt = gmtLdt.atZone(ZoneId.of("GMT", ZoneId.SHORT_IDS));
10System.out.println("gmtZdt=" + gmtZdt); // 2016-05-18T01:23:45Z[GMT]
11ZonedDateTime jstZdt = gmtZdt.withZoneSameInstant(ZoneId.of("JST", ZoneId.SHORT_IDS));
12System.out.println("jstZdt=" + jstZdt); // 2016-05-18T10:23:45+09:00[Asia/Tokyo]
13DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssZ");
14String jstDateString = formatter.format(jstZdt);
15System.out.println("jstDateString=" + jstDateString); // 20160518102345+0900
場合によっては、MySQL側でJSTに変換してしまう方が楽かも知れませんね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/06 01:02