0

私の問題は 2 つあります。できるだけエレガントに扱うようにしています。

以下の形式の日付を指定します。

 YYYYMMDD hh:mm:ss

可変日数離れた対応する日付を見つけるにはどうすればよいですか? たとえば、日付が指定された場合、その日付から "x" 日離れたその形式の対応する日付を見つけることができる必要があります。

この生成された日付は、データベースの activation_date 列に保存するものです。次に、毎晩データベースにクエリを実行して、その日付がまだあるかどうかを確認します。もしそうなら、別の列のアイテムのステータスを保留中からアクティブに変更します。

これは私の問題を処理する最良の方法のように思えますが、解決するのは非常に簡単ではないようです。

別の方法として、DB に days_till_activation 列を作成し、エントリごとにその列の値をゼロになるまで毎晩減少させるスクリプトを用意します。ゼロに達すると、スクリプトはステータスを変更します。これに関する問題は、データベースを処理する方法が非常に貧弱であるように思われることです。必要な場合にのみ行うのではなく、データベースへの書き込みが多く含まれます。

とにかく、どんな考えでも大歓迎です。Javaでソリューションを処理する必要がありますが、疑似コードで問題ありません。

4

2 に答える 2

1

以下の形式の日付を指定します。

YYYYMMDD hh:mm:ss

それがあなたの最初の問題です。日付を特定の形式で考えないでください。データベース スキーマが適切な日付/時刻フィールド タイプを使用していることを確認し、Java コードでも適切なタイプを使用してください。ユーザーに表示する場合を除き、文字列表現を表示する必要はありません。

幸いなことに、この部分は簡単です。

可変日数離れた対応する日付を見つけるにはどうすればよいですか?

Joda Timeを使用して、可能な限り日付と時刻の値を表すことをお勧めします。それはそれを簡単にします:

LocalDate date = ...;
LocalDate activation = date.plusDays(activationDays);

これには/を使用することもできますが、データベースからデータを抽出したらできるだけ早く Joda Time 型に変換し、可能な限り最後の時点でネイティブ Java 型に戻すことをお勧めします。そうすれば、できるだけ多くの時間、Java 型の厄介さを回避できます。java.util.DateCalendar

于 2012-05-22T18:18:26.273 に答える
0

このような状況では、有効期限のタイムスタンプ(currentTimeMilis() + x * MILLIES_PER_DAY)を保持する整数型の列を選択して、クエリを非常に簡単にします(where expiration < ?パラメーターをにバインドしますcurrentTimeMilis())。

日付/時刻タイプの列を選択すると、ソリューションが複雑になり、動作がデータベースのインストールに依存するようになります(OS言語の変更によって違いが生じる可能性があります)。

于 2012-05-22T18:23:17.137 に答える