以下のコードで取得できるUNIX時間は、どれも等しいです。
---
System.currentTimeMillis();
new Date().getTime();
Calendar.getInstance().getTimeInMillis();
---
ここで取得される時間は、実行環境のOSのタイムゾーンに依存します。
例えば私のWindowsのタイムゾーンは日本ですので、GMT(UTC)に+9時間(=32400000ミリ秒)された値となります。
ではなく、直接「GMT(UTC)の現在時刻をUNIX時間で取得」したり、「引数に指定したタイムゾーンの現在時刻をUNIX時間で取得」するAPIはないのでしょうか?
Apache Commonsなどのメジャーなライブラリでも構いません。
よろしくお願いいたします。
ここで取得される時間は、実行環境の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());
df.setTimeZone(TimeZone.getTimeZone("UTC"));