2

私はJavaで書かれたジョブを持っており、そのタイムゾーンで毎日指定された時間に実行されます。たとえば、私が初めて0800時間にジョブを開始した場合、それは常に毎日同じ時間にジョブを実行する必要があります。タイムゾーンがDSTに準拠していない場合、これは正常に機能します。ただし、DSTに従うと壊れます。

たとえば、0800 PSTで初めてジョブを開始した場合、DSTが有効でない限り、常にUTCで0000時間で実行する必要がありますが、DSTが有効な場合は、前日の2300時間UTCに移動する必要があります。これらのDSTの変更に合わせて、プログラムでジョブの開始時間を調整するにはどうすればよいですか。

私の入力は次のようになります。

String startdate = "2012-06-16T08:00:00"
String timeZone = "PST";

これらは設定ファイルにある定数であり、一度設定すると変更できません。DSTが有効であるかどうかに関係なく、入力はPSTになります。

したがって、現在のタイムゾーンがPSTの場合は、UTC 2012-06-16の0000時間に実行されます。そうでない場合は、UTC2012-06-15の2300時間に実行されます。

どうすればこれを達成できますか。

注:これは宿題の質問ではありません。私はDSTに準拠していない地域から来ているので、少し混乱します。

前もって感謝します。

4

1 に答える 1

0

ジョブをどのようにスケジュールしているかはわかりませんが、次の実行日を手動で計算する場合は、次のように使用できjava.util.Calendarます。

TimeZone tz = TimeZone.getTimeZone( timeZone );
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss" );
dateFormat.setTimeZone( tz );
Calendar cal = Calendar.getInstance();
cal.setTimeZone( tz );
cal.setTime( dateFormat.parse( startdate ) );

次に、ジョブを実行するたびに、ジョブの次の実行時間を計算できます。

cal.add( Calendar.DAY_OF_YEAR, 1 );

これにより、24 時間ではなく、1 暦日が追加されます。そのため、開始日が現地時間の午前 8 時だった場合、DST 期間中でも引き続き現地時間の午前 8 時に実行されます。カレンダーが DST 変換を処理します。

于 2012-06-17T11:27:00.383 に答える