0

次のようにタイムゾーンごとに現在の時刻を表示しようとしていますが、期待どおりに時刻が出力されません。

long currentLong = System.currentTimeMillis();
TimeZone.setDefault(TimeZone.getTimeZone("EST"));
System.out.println("EST=="+ new java.util.Date(currentLong).toString());

TimeZone.setDefault(TimeZone.getTimeZone("CST"));
System.out.println("CST=="+ new java.util.Date(currentLong).toString());

TimeZone.setDefault(TimeZone.getTimeZone("MST"));
System.out.println("MST=="+ new java.util.Date(currentLong).toString());

TimeZone.setDefault(TimeZone.getTimeZone("PST"));
System.out.println("PST=="+ new java.util.Date(currentLong).toString());

TimeZone.setDefault(TimeZone.getTimeZone("AST"));
System.out.println("AKST=="+ new java.util.Date(currentLong).toString());

TimeZone.setDefault(TimeZone.getTimeZone("HST"));
System.out.println("HAST=="+ new java.util.Date(currentLong).toString());

プログラムを実行すると、次のようになります。

EST==Sat Nov 03 22:24:02 EST 2012
CST==Sat Nov 03 22:24:02 CDT 2012
MST==Sat Nov 03 20:24:02 MST 2012
PST==Sat Nov 03 20:24:02 PDT 2012
AKST==Sat Nov 03 19:24:02 AKDT 2012
HAST==Sat Nov 03 17:24:02 HST 2012

なぜ CST の時間が EST と同じで、MST と PST が同じなのか疑問に思っています。

誰かが私に何が問題なのか教えてもらえますか?

ありがとう。

4

2 に答える 2

2

を使用しないでください。とTimeZone.setDefault()を使用してください。かなり非推奨ですが、はるかに優れています。Calendar.getInstance(TimeZone tz)Calendar.setTimeZone()DateCalendar

于 2012-11-04T03:31:50.530 に答える
0

問題は、間違ったクラスを使用していることです。もちろん、デフォルトのタイムゾーンを設定しないでください。

まず、デフォルトのタイムゾーンは、基盤となるオペレーティングシステムのタイムゾーンです。デスクトップアプリケーションで使用しても問題ありませんが、Webアプリケーションに有効な時間を与えることはできません。Webアプリケーションでは、ユーザーに自分の好みのタイムゾーンを尋ねるのが最善です。

さて、タイムゾーンを変換したい場合、それは実際には非常に簡単ですが、正しいクラスを使用する必要があります。正しいクラスはDateFormatです:

Date now = new Date();
// you need to detect locale somehow
// this way is valid with desktop applications only
Locale locale = Locale.getDefault(Locale.Category.FORMAT);
DateFormat df = DateFormat.getDateTimeInstance(
    DateFormat.DEFAULT, DateFormat.DEFAULT, locale);
TimeZone est = TimeZone.getTimeZone("EST");
TimeZone mst = TimeZone.getTimeZone("MST");

df.setTimeZone(est);
System.out.println(df.format(now));
df.setTimeZone(mst);
System.out.println(df.format(now));

タイムゾーンが同じであるかどうかについては、いつでも平等を求めることができます。

System.out.println(est.equals(mst));

これらのタイムゾーンは異なる可能性がありますが、現在のオフセットは同じです。オフセットがどのようなものかを問い合わせることができます:

int estOffset = est.getOffset(now);
于 2012-11-04T09:24:56.200 に答える