WEBアプリのシステム日付について

どうでもいいことかもしれないが、WEBアプリにおいて、みなさんはシステム日付をどう扱っているのでしょうか?

たとえば、RDBMSOracleの場合、データをインサートするときにシステム日付を格納したい場合に、sysdate を使うのでしょうか? それとも、アプリ側で new java.sql.Date() した値を格納しているのでしょうか?

つまり、アプリサーバのシステム日付を使うのか、DBサーバのシステム日付を使うのかということである。

ここでは話を簡単にするためにアプリサーバとDBサーバは別筐体であるがNTPなどで時刻の同期はされているものとする。ならばどっちでもいいじゃないかと言いたいところだけど、ルールを作るとして、である。

で。

アプリで取得したシステム日付を使う

メリットは、

  • システム日付を取得するルーチンを決めておけば(勝手にnew Dateされないルールにしておけば)、そのルーチンを加工すると任意の日付を設定することができ、年度またぎのテストなどができる。
  • たとえば100件インサートが走る場合、アプリ的には同じタイミングでインサートしたはずなんだけど、sysdate を使うと、1件目と100件目でことなるタイムスタンプが格納されることがある。これは要件しだいだけど。

デメリットは・・・。なんだろ。
new Date() しないでね、はルールだから、守らない人がでてくる。まあこれは論点がズレてるか。ルールが守られた上でのメリット・デメリットだからな。

DBサーバで取得したシステム日付を使う

メリットは、

  • SQLが若干楽。

デメリットは、

  • DB格納以外でシステム日付がほしいときに、select sysdate from dual; をするのか?


うーん、これだとアプリで設定するべき、ってなるのかな。
みなさんどうですか?