人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaのタイムゾーンを考慮した時間取得について質問です。
以下のコードで取得できるUNIX時間は、どれも等しいです。
---
System.currentTimeMillis();
new Date().getTime();
Calendar.getInstance().getTimeInMillis();
---

ここで取得される時間は、実行環境のOSのタイムゾーンに依存します。
例えば私のWindowsのタイムゾーンは日本ですので、GMT(UTC)に+9時間(=32400000ミリ秒)された値となります。

ではなく、直接「GMT(UTC)の現在時刻をUNIX時間で取得」したり、「引数に指定したタイムゾーンの現在時刻をUNIX時間で取得」するAPIはないのでしょうか?
Apache Commonsなどのメジャーなライブラリでも構いません。
よろしくお願いいたします。

●質問者: gfs
●カテゴリ:コンピュータ
✍キーワード:Apache API commons DATE GMT
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

ここで取得される時間は、実行環境のOSのタイムゾーンに依存します。

これは、どこから得た情報ですか?

まず、これが間違ってます。

質問に挙げられた API が返す値は、いずれも UTC での 1970年1月1日 0時0分からの通算ミリ秒です。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#currentTimeMillis%28%29

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Date.html#getTime%28%29

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Calendar.html#getTimeInMillis%28%29


ロケールに応じた時刻に変換できるのは、タイムゾーンを表すクラスがあって、

それが UTC との時刻の差を持っているからです。

この辺りは、unix と考え方は同じです。


「引数に指定したタイムゾーンの現在時刻をUNIX時間で取得」するAPI

直接のAPI はありませんが、特定のタイムゾーンと UTC との差を取得できる API はあります。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/TimeZone.html#getRawOffset%28%29

TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
System.out.println(c.getTimeZone().getRawOffset());
◎質問者からの返答

なるほど!大きな勘違いをしていました。

私は自分のテストコードで、SimpleDateFormatを利用していたのですが、このクラスのコードを読んでみたところ、this(pattern, Locale.getDefault()); となっており、デフォルトのタイムゾーンを使用しています。つまり日本時間に変更されていました。

これを、System.currentTimeMills(); で取得した時点で、日本時間を取得しているのだと勘違いしていました。

SimpleDateFormatの第2引数にLocaleを渡す必要があったんですね。

とても勉強になりました。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ