2013-03-24 などの日付を指定すると、米国/太平洋タイムゾーンでその日の終わりに変換したいと考えています。その地域の特定の日付のタイムゾーンが PST になるか PDT になるかを調べる方法はありますか? ところで、私はJavaを使用しています。
これを行う方法はないと思いますが(少なくとも、タイムゾーンの移行がいつ発生するかを知っているデータベースにクエリを実行しないと)、確認したいと思いました。
2013-03-24 などの日付を指定すると、米国/太平洋タイムゾーンでその日の終わりに変換したいと考えています。その地域の特定の日付のタイムゾーンが PST になるか PDT になるかを調べる方法はありますか? ところで、私はJavaを使用しています。
これを行う方法はないと思いますが(少なくとも、タイムゾーンの移行がいつ発生するかを知っているデータベースにクエリを実行しないと)、確認したいと思いました。
Java Calendar がそれを処理します。自分でタイムゾーンを整理する必要はありません。
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dateInServerTZ = format.parse("2013-03-24");
Calendar calInServerTZ = Calendar.getInstance();
calInServerTZ.setTime(dateInServerTZ);
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
calInPST.set(Calendar.YEAR, calInServerTZ.get(Calendar.YEAR));
calInPST.set(Calendar.DAY_OF_YEAR, calInServerTZ.get(Calendar.DAY_OF_YEAR));
calInPST.set(Calendar.HOUR_OF_DAY, 23);
calInPST.set(Calendar.MINUTE, 59);
calInPST.set(Calendar.SECOND, 59);
calInPST.set(Calendar.MILLISECOND, 999);
Date endOfDayPST = calInPST.getTime();
PST に解析することでステップを省略できますが、この例は、サーバー時間とユーザー時間の関係で何が起こっているかをより明確にすると感じました。
これは明らかにより効率的です。
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
Date dateInPST = format.parse("2013-03-24");
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
calInPST.setTime(dateInPST);
calInPST.set(Calendar.HOUR_OF_DAY, 23);
calInPST.set(Calendar.MINUTE, 59);
calInPST.set(Calendar.SECOND, 59);
calInPST.set(Calendar.MILLISECOND, 999);