SimpleDateFormatで行けるかと思ったのですが仕様を満たすには壁が幾つかあり…
仕方なく力技で突破してみました。
「壁」というのが
0. IDから生成したTimeZoneから標準時からのオフセット表示に直接変換する機能が見つからない
0. SimpleDateFormatのフォーマットで「UTC」ではなく「GMT」表示
これを突破するために、
0. オフセットのミリ秒が取得できるのでそこからGMTオフセット表示のTimeZoneに変換
0. 変換してから文字列置換
という手段を使い半ば無理やり実装しました。
java
1import java.text.DateFormat;
2import java.text.SimpleDateFormat;
3import java.util.Date;
4import java.util.TimeZone;
5
6public class Q49867 {
7
8 public static void main(String[] args) {
9 DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z");
10 Date date = new Date();
11 TimeZone timeZone = TimeZone.getTimeZone("Asia/Tokyo");
12 timeZone = makeGMTTimeZone(timeZone.getOffset(date.getTime()));
13 format.setTimeZone(timeZone);
14 String str = format.format(date).replace("GMT", "UTC");
15 System.out.println(str);
16 }
17
18 private static TimeZone makeGMTTimeZone(long offset){
19 boolean negate = offset < 0;
20 offset = Math.abs(offset);
21 int offMinutes = (int) (offset / (1000 * 60));
22 int minute = offMinutes % 60;
23 int hour = offMinutes / 60;
24 StringBuilder builder = new StringBuilder("GMT");
25 builder.append(negate ? '-' : '+').append(String.format("%1$02d:%2$02d", hour, minute));
26 return TimeZone.getTimeZone(builder.toString());
27 }
28
29}
30
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 00:27