• ベストアンサー

DBから日付を取得し、別に設定した日付と比較する方法

 こんにちは。JSPを使ってDB(MySQL)アクセスをするアプリケーションを作っています。DBのデータとしての日時は”2005/4/18”のような形(または”2005-4-18”どちらでも可。2005/04/18のように0をつけても可)を想定しております。  DBの日時は会員の入会年月日で、それを管理者が管理画面から別の日付(基準日)を選択し、POSTで投げて入会年月日と基準日を比較し、勤続年数(?会員である年数)を計算・表示したいと思っています。  そこで、上記のような2005/4/18といった形のデータを、どうやって年と月と日に分ければいいのかがよくわからず困っています。DBのフィールドはまだ変更可能です。アドバイスをお願いいたします。

  • Java
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

連続で失礼します。 DBをTimestampeで仮定してます。 DBから取得した入会日を Timestamp entry; とします。 管理画面からの基準日を Timestamp base; とします。 ここで基準日>入会日なら long l_kinzoku = base.getTime() - entry.getTime(); で、差分を求めて、 Timestamp kinzoku = new Timestamp(l_kinzoku); とします。 kinzokuは1970年1月1日からの経過時間になっているので、kinzokuの西暦部分から1970を引いたものが勤続年数になりませんかね???

chizudara
質問者

お礼

早速のご回答ありがとうございました!おっしゃる方法でやってみます。どうもありがとうございました。

その他の回答 (2)

  • brax3
  • ベストアンサー率36% (17/47)
回答No.3

Java側で差分を求めるなら ResultSetからgetDateで値を取得してそれを元にCalendarクラスのインスタンスを取得してYEARのフィールドの値を取得して差分を求めればいいだけでは。

参考URL:
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html
回答No.1

日時のフォーマット(形式)さえ決まれば、 単純に文字列をsubstringしてから数値に変換して、 (DBの日時はTimestampのtoString()からsubstring) 引き算してはどうですか? 勤続年数なので、月以下は無視してしまう、無視できないのなら、12進法?として扱う。 マイナスの可能性を考えて予めjava.sql.Timestamp.after()かbefore()でどちらが前かチェックしておくとかも考えておくといいかもしれません。

関連するQ&A

  • 平均勤続年数

    平均の勤続年数の出し方を教えて下さい。 基準日→ 2020年3月31日 (1) 2014年6月16日入社 (2) 2019年5月23日入社 この2名分の勤続年数をエクセルで〇年〇ヵ月で出すにはどのようにすれば宜しいでしょうか? A1に基準日を入れています。 入社年月日はA2からA3です。

  • PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方

    PHP5+MySQLで現在日時とDB内の開始日時と終了日時との比較の方法を教えてください。 table_a id start end ----+--------------------+---------------------+ 001 2010-01-01 10:00:00 2010-01-03 18:30:00 002 2010-01-01 12:00:00 2010-01-05 20:00:00 ・ ・ というデータがある時、 現在の日時がid:001のstartとendの間だったら1、 start前だったら0、endより後だったら2の値を表示させるにはどうしたらいいのでしょうか? $sql = "SELECT A.id ,A.start ,A.end FROM table_a A WHERE A.id = ".$id." "; $result = mysql_query($sql); で取得して time()などと比較すればいいとは思ってますが、DBから持ってきた日付との比較方法がわかりません。

    • ベストアンサー
    • PHP
  • アクセスで[基準日]を一括で更新したいのですが。

    アクセスの超初心者です。 書籍やネットでも調べたのですがどうしてもわかりません。皆様宜しく願いいたします。 生年月日や就職日などから基準日を入力してやると年齢や勤続年数を得るものを作っているのですが。 データが数百あるので、この基準日が必要の都度入力して年数を替える方法を探しています(基準日は全て同一でいいのですが)。 例えば更新クエリを実行すると、プロパティが開いて基準日を入力し一括で基準日を全部変換する方法等はありませんでしょうか。(何日後などの決まったものは出来るのですが、更新クエリ実行の都度入力して一括で基準日を更新したいのです) 又、他の方法などありましたらご教授宜しくお願い致します。

  • エクセルの計算式

    エクセルにて生年月日と入社年月日を入力し、60歳到達時(誕生日の前日)までの勤続年数を計算する方法はありますでしょうか? 例)22歳で入社→勤続年数38年間   45歳で入社→勤続年数15年間 年齢と現在までの勤続年数はそれぞれ分かるので、手計算で一件づつ行えばわかるのですが、エクセルでもできますでしょうか?  宜しくお願い致します。

  • エクセルでの勤続年数算出は?

     エクセルで勤続年数を出す方法を教えてください。 過去の質問を見ましたが、どう組み合わせたらいいのか分からず。。。 勤続年数を次のように算出したいのです。 「(1)15年まで55歳まで」「(2)15年以上55歳まで」「(3)55歳以上」  例えば   基準日   H20.4.1   生年月日  S26.6.20(56才9カ月12日)   入社日   S53.4.1(30年)   「(1)15年」「(2)13年2ヵ月18日」「(3)1年9カ月12日」   基準日   H20.4.1   生年月日  S24.4.29(58才11カ月3日)   入社日   H7.4.1(13年)   「(1)9年0カ月27日」「(2)」「(3)3年11カ月3日」 というような結果が出るように式を作りたいのです。 datedif等でいろいろ考えたのですが、いい方法がわかりません。 よろしくお願いします。

  • 勤続年数の求め方

    Access2003+SQLServer2005を使っています。 Accessのクエリでは勤続年数(2007年3月20日現在の勤続年数)を求めるのに以下を使っていました。 勤続年数: DateDiff("m",[入社年月日],#2007/03/20#)\12 & "年" & DateDiff("m",[入社年月日],#2007/03/20#) Mod 12 & "ヶ月" これを、ストアドプロシージャで行うにはどのように記述すればよいでしょうか? よろしくお願いします。

  • 平均勤続年数の出し方について

    調べたのですが、平均勤続年数がどうしてもエラーになってしまうので、教えてください、お願い致します。 K(入社年月日)  L (基準日) K2 (2010/4/1)  L2 (2013/3/31) K3 (2011/1/1) ・ ・ ・ K69 (2013/3/25) この場合の、基準日時点の平均勤続年数の関数は =DATEDIF(AVERAGE(K2:K69),L2,"Y")&"年"&DATEDIF(AVERAGE(K2:K69),L2,"YM")&"ヶ月 と入力してもエラーになってしまいます。 分かる方どうか教えてください!

  • エクセルのデータから日付を抜き出す方法について

    エクセルで日時を含む値のセルから2ヶ月以内の日付があれば気づけるような仕組みを作ろうとしています。 データの内容は以下のような形です。 aaaaa bbbbb end : 12:59:59 25 Feb japan 2019 ccccc ddddd end : 18:33:42 31 Mar japan 2019 ・ ・ ・ 上記のように一つの列にデータが複数あり、3行目、5行目のような形式で日時が記載されたセルがあります。 aaaaa、bbbbbは日時とは全く関係のないデータです。 LEFTやMID関数で日時を抜き出し、現在の日時より62日以内の数値だけわかるように表示させる。 というようなことを考えましたが、抜き出したデータが日付として認識されなかったりとうまくいきません。 やり方は問いませんので、どなたか知恵をお貸しいただけると幸いです。

  • 勤続年数の平均の出し方を教えて下さい。

    エクセルで勤続年数の表を作成しました。 左のセルから 名前:生年月日: 年齢(=DATEDIF(E3,$I$1,"Y")&"歳"&DATEDIF(E3,$I$1,"YM")&"ヶ月"):入職日:勤続年数(=DATEDIF(G3,$I$1,"Y")&"年"&DATEDIF(G3,$I$1,"YM")&"ヶ月") という表です。 その中で勤続年数の平均を出したいのですが、 勤続年数を足して、人数で割るという形では駄目なようです・・・。 何か方法はないでしょうか? よろしくお願いします。

  • Excelで入社・退社年月日を入力して、勤続年数表示したい

    Excelで入社年月日と退社年月日を入力すると、 勤続年数が表示できるようにしたいのですが、 方法が分かりません。 DateDifという関数があると過去の質問を検索してみたらでてきましたが、どのように使ったらよいのかが分かりません。 入社年月日⇒14年4月1日 退社年月日⇒16年4月20日 勤続年数⇒2年1ヶ月 という具合に、一ヶ月未満の日数がある場合は1ヶ月に繰上げて表示したいです。 そして、休業期間がある場合は同様に休業期間を表示して、勤続年数からマイナスして結果的に 勤続年数-休業期間=在職期間 と表示できるようにしたいです。 ご存知のかた教えてください!よろしくお願いいたします。