QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

データベースからの日付・時刻型データの取得について

お世話になります。

データベース(MySQL4.1)から日付・時刻型のデータ取得について質問させて下さい。

char や varchar といった文字列型のデータは getString() で取得すれば良いと
思いますが、time、date、timesatamp といった日付・時刻型のデータを取得するには、
どのように取得するのが良いのでしょうか?
getTime() getDate() getTimeStamp() 等で取得しよう考えていたのですが、
java.sql.Time や Date の API を見ると、ほとんどのメソッドが非推奨のもので、
toString() で文字列型に変換するしかないのなら、最初から getString() で
取得しておいた方が無難なのかとも考えています。
今のトコロは、取得したデータを画面表示するだけなので、問題ないのですが、
今後は、他の日付や時間と対比させたり等をしたいと考えていますので、何か
汎用的に使える様な方法は無いでしょうか?

よろしくお願いします。

質問者:RYO

回答

Timestampやjava.sql.Dateのスーパークラスである
java.util.DateのAPI仕様は、ちゃんとお読みになられましたか?

投稿者:悶吉

編集 履歴 (0)

読んだつもり・・・です。
java.util.Date は非推奨なので、Calendar もしくは regorianCalendar を
使うという事でよろしいですか?

そうすると、getString() で取得したデータを、年・月・日・時・分・秒に
分解して Calendar に set するという事になるのでしょうか?

投稿者:RYO

編集 履歴 (0)

RYOさんの書き込み (2006-02-21 11:34) より:

読んだつもり・・・です。

java.util.Date は非推奨なので、Calendar もしくは regorianCalendar を

使うという事でよろしいですか?

API仕様に書かれている通りです。

そうすると、getString() で取得したデータを、年・月・日・時・分・秒に

分解して Calendar に set するという事になるのでしょうか?

Calendar#setTime(Date)やCalendar#setTimeInMillis(long)あたりを読むと幸せになれるかもしれません。

投稿者:悶吉

編集 履歴 (0)

悶吉さんありがとうございました。幸せになれました。

APIはしっかり読まないとダメですね・・・。すみませんでした。

投稿者:RYO

編集 履歴 (0)

まさか、long値をDBに格納するようにはしてませんよね?
なんか、やりとりを見てるとそれで「できました」と思ってしまっている悪寒が…。

投稿者:未記入

編集 履歴 (0)

ご心配ありがとうございます。大丈夫です。
DB の Date は YYYY-MM-DD、Time は TT:MM:SS、TimeStamp は YYYY-MM-DD TT:MM:SS
の形式で格納してあります。

(DB)Date型のデータは getDate() で取り出し、Calendar へ setTime() で格納しよう
と考えています。
(DB)TimeStamp型のデータは getTimeStamp() で取り出し、TimeStamp#getTime() で
long値にし、それを Calendar へ setTimeInMills() で格納しようと考えています。
(DB)Time型は Calendar へは格納できない・・・ですよね。なんで、そのまま Time で持っておこうかなと考えています。

ダメですかね?

投稿者:RYO

編集 履歴 (0)

DB の Date は YYYY-MM-DD、Time は TT:MM:SS、TimeStamp は YYYY-MM-DD TT:MM:SS

の形式で格納してあります。

「DB内部の値」と「出力時の書式」は別の問題です。
(文字列型で格納してないですよね?)

まずはSQLのDATE, TIME, TIMESTAMP型とjava.util.Dateクラスの違い
(とりうる値の範囲など)について整理してみるのが良いと思います。

あと、結局何をしたいのかよくわからないので、
ゴールをもっと具体的に書くようにしてください。

※ただ「幸せになりたい」だけなら、別な方法でお願いします。

投稿者:vincent

編集 履歴 (0)

DB側は普通にDATE、TIME、TIMESTAMPなどDBが用意している型を使ってください。お願いです。

Java側の

java.sql.Date
java.sql.Time
java.sql.Timestamp

はどれも

extends java.util.Date

です。そして、CalendarクラスにはsetTime(java.util.Date)というメソッドがあります。
...あとはどうすればいいかわかりますよね ?

# と悶吉さんは言いたかったのですよ。

投稿者:未記入

編集 履歴 (0)

すみませんでした。私の質問のしかたが悪かったようで、皆様には
ご迷惑をおかけしてしまいました。今後は気をつけます。

投稿者:RYO

編集 履歴 (0)
Watch

この質問への回答やコメントをメールでお知らせします。

この質問に回答する


この質問の答えをご存知ですか? ぜひ質問者に伝えてあげてください (サインインすると、回答フォームが表示されます)。

サインイン