Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Dateについて

すみませんが、また質問です
昨日の続きです
java.sql.Date dt = new java.sql.Date(long g);
とインスタンス変数に引数をlong型で入れるとします。
long型の範囲は-134217728〜134217727です。
しかしこの範囲を超えて引数に値を入れたいのです。
この範囲を超えて値を入れる方法はないのですか?
例えばjava.sql.Date dt = new java.sql.Date(long g);
のlong型をfloat型に変える方法などです。
他の方法があったら是非教えてください。
御教授よろしくお願い致します。

11

回答

9696

閲覧

11件の回答

評価

0

続きであれば、返信にしましょう。

その範囲を超えた数を入れたいというのは、なぜでしょうか。
ちなみにlongの範囲は、

-9223372036854775808〜9223372036854775807

です。

評価

0

すみません。遅くなりました。
longの範囲間違えてました。申し訳ありません。

longより大きな値を入れたい理由は
    public Date(java.sql.Date dt) {
        cal = Calendar.getInstance();
        cal.setTime(dt);
    }
というコンストラクタの引数にjava.sql.Date型のdtを
入れるのですが、この場合dtにlong型で値を渡したいのです。
↑は別クラスで
実行クラスは↓
java.sql.Date dt = new java.sql.Date(long g);
インスタンス引数にlong型で値を入れ、それをDate(dt)でコンストラクタに引数を渡すわけです。しかしコンストラクタから帰ってくるのはグリニッジ標準時の時刻です。欲しい値は任意の時刻です。例えば2005/10/7など。
コンストラクタのsetTime(dt)で、実行クラスから得られたjava.sql.Dateのlong型の値が時刻に変換されるわけです。
2005/10/7に変換したい場合、グリニッジ標準時を基準とするので
インスタンス引数に入れるlongの値は
longの範囲を上回ってしまいます。なのでlong型ではなく
それを上回る値を入れたいのです。
よろしくお願い致します。

評価

0

java.sql.Dateクラスは、DBのDATE型に使うことが前提なので、時刻は考えない(常に0で保持される)ようになっています。
DATE型のカラムには、そもそも時刻のデータがないはずです。

java.util.DateクラスあるいはCalendarクラスは、long型でちゃんと時刻まで示すように設計されています。

>しかしコンストラクタから帰ってくるのはグリニッジ標準時の時刻です。
おそらく0時0分0秒のことをおっしゃっているのでしょうが、
グリニッジ標準時というのは、日本時間-9時間の時刻のことを言います。
java.sql.Dateで保持している時刻が0時0分0秒なのだから、返ってくるのが0時0分0秒なのは正解です。

>欲しい値は任意の時刻です。
実現したいシステムにおいて、時刻のデータはどこから出てくるんでしょうか?

評価

0

>ムラッチさん

そもそも何がしたいのですか?
恐らく今やろうとしている事は不必要な事です。
察するに、指定した日時のjava.sql.Dateのインスタンスが
欲しいんじゃ無いですか?
それだったら、

SimpleDateFormat format = new SimpleDateFormat("yyyt/M/d h:m:s");
String s = "2005/12/9 10:49:33";
java.sql.Date d = new java.sql.Date(format.parse(s).getTime());

でOKです。


>mioさん

間違ってますよ。

>java.sql.Dateクラスは、DBのDATE型に使うことが前提なので、?>時刻は考えない(常に0で保持される)ようになっています。
>DATE型のカラムには、そもそも時刻のデータがないはずです。

java.sql.Dateも時刻を保持しますし、どのデータベースか知りませんが少なくともOracleのDATE型も時刻を持ってます。

Date d = new Date( System.currentTimeMillis() );
SimpleDateFormat format = new SimpleDateFormat( "yyyy/MM/dd hh:mm:ss" );
System.out.println( format.format( d ) );
実行すれば時刻も表示されますよ。
OracleのDATEもデフォルトの表示が時間を表示しないだけ。

util も sql も 内部的には long で日時を保持します。
sql の Date は単に便利なメソッドが追加されているのと、
いくつかのメソッドがオーバーライドされているだけ。

評価

0

>java.sql.Dateも時刻を保持しますし、どのデータベースか知りませんが少なくともOracleのDATE型も時刻を持ってます。
あ、そうですか。それは失礼しました。
Oracleの知識はあまりないので、DB2の知識で考えてました。
DB2ではTIMESTAMP型というのを使っています。

sql.Dateにlongを渡すと、時刻が0クリアされるようと記憶してたんですが、そんなことはなかったですね。
指摘ありがとうございます。

評価

0

>DB2ではTIMESTAMP型というのを使っています。
それなら Javaでも java.sql.Timestamp 型を使用するべきでは?

評価

0

>それなら Javaでも java.sql.Timestamp 型を使用するべきでは?
それはこの質問では関係ない話でしょう。

評価

0

mio>java.sql.Dateクラスは、DBのDATE型に使うことが前提なので、
mio>時刻は考えない(常に0で保持される)ようになっています。
mio>DATE型のカラムには、そもそも時刻のデータがないはずです。

↑そもそもこれが関係無い話なのでは?
ムラッチさんも「データベース」とも「時間」とも言ってませんから。

評価

0

>欲しい値は任意の時刻です。
というところで、「時間」は出ています。

データベースは、たしかに出ていませんね。
util.Dateではなく、わざわざsql.Dateを使うということなので、データベースから引いていると考えました。

評価

0

質問には関係の無い話は辞めるのかと思ったらやっぱりするんですね。
まぁ、後は一人でどうぞ。

評価

0

はいはい。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。