使ってください:
import org.springframework.scheduling.support.CronSequenceGenerator;
final String cronExpression = "0 45 23 * * *";
final CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression);
final Date nextExecutionDate = generator.next(new Date());
...そして、日付の比較にJodaDateTimeを使用することをお勧めします。
Quartz APIの org.quartz.CronExpression クラスを調べることをお勧めします。
Cron式は(通常)さまざまな日付のシーケンスを表すため、cron式を日付と単純に比較することはできないことに注意してください。いずれにせよ、次の方法が役立つ場合があります。
public boolean isSatisfiedBy(Date date)
public Date getNextValidTimeAfter(Date date)
2つのcron式の比較について、何を比較しますか? IMOが比較するのに意味があるのは、次の「トリガー」日付、つまりgetNextValidTimeAfter([some reference date])呼び出しから取得された日付だけです。
Cron式を処理するための小さなクラスを作成しました。ここで入手できます: https://github.com/frode-carlsen/cron
Joda-timeに基づいていますが、Java8 timeapiへの移植はかなり簡単です。これにより、Joda-timeのDateTimeオフセットを調整することで、単体テストへの埋め込み、シミュレーションの実行なども可能になります。
また、テストカバレッジもかなり良好です(TDD Kataとして実行されました)。
UpdateJava 8回のAPIもサポートするようになりましたgithubユーザーからの寄稿 https://github.com/zemiak 。どちらの場合も、式パーサーは単一の小さなクラスであり、独自のプロジェクトに簡単にコピーできます。
おそらくあなたはチェックすることができます cron-utils それは特定の日付、例えば今を与えられた次/前の実行を取得するためのいくつかのユーティリティを持っています。 JodaTimeで動作しますが、そこからJavaDateを取得できます。ライブラリはスケジューラに依存しません。文字列にcron式を指定するだけです。 JDK6と互換性があります。