2012-04-12 8 views
1

こんにちは、私はこのコードの抜粋を持っている:私は、デバッガで見るとjava.sql.Timeからjoda時間を作成する方法は?

end = new DateTime(mergeToDateTime(this.endDate, this.empEndTime)); 

Duration extraTime = new Duration(this.preTime.getTime()); //add the first 30 mins 
extraTime = extraTime.plus(new Duration(this.postTime.getTime())); //add the second 30 mins 
end = end.plus(extraTime); // extraTime = -3600? 

私の期間は常に負に予定されています。 APIによれば、の長さのタイプがのタイプであるため、getTime()のタイプのタイムアウトを作成することはできますが、これはどういうわけかわかりません。あなたが期間として、時間にインスタントを使用する場合(preTimepostTimeたjava.sql.Time種類をされている)

答えて

3

java.sql.Timeというインスタンスは、そのミリ秒値にタイムゾーンオフセットが含まれるように作成されていると思います。例えば

java.sql.Time(int hour, int minute, int second)コンストラクタを廃止予定のアカウントに現在のタイムゾーンのオフセットをとる。

System.out.println(new Time(1, 0, 0).getTime()); // Prints -7200000 in UTC+3 timezone 

タイムゾーンオフセットは、JDBCドライバによって導入されるように見え、それは容易LocalTimejava.sql.Timeを変換することによって補償することができる(and vice versa ):

LocalTime lt = new LocalTime(time); 

その後、期間にLocalTimeを変換することができます:

Duration d = new Duration(lt.getMillisOfDay()); 
+0

あなたはそうです。 getTime()のプリントアウトは-1800000を示します。 –

+0

java.sql.Timeから期間を作成する最善の方法は何ですか? –

+0

@ダーク:これは、これらの「時間」がどこに由来し、それらが何を意味するかによって異なります。概念的に持続時間を表す 'Time'(' new time(3600000) 'が正確な持続時間1時間)の場合、あなたの質問に示されているように変換することができます。 'Time'が何か違うものを表している場合、それをdurationに変換する方法が明確ではありません。 – axtavt

2

は、あなたは間違って始めませんか?使用しているコンストラクタシグネチャはDuration(long duration)で、Duration(long startInstant)ではなく、実際にはそのようなコンストラクタはありません。

+0

時間内にインスタンスを使用していません。時間値を使用しています。私の変数は、純粋に30分(HH:mm:ss => 00:30:00)を表す時間形式でデータベースに格納されています。これは瞬間ではなく、日付も含まれています。 getTime()は時間の長い値を返します。 (少なくともそれはjavaの医師が示したものです) –

+2

それで、受け入れられた答えに記述されているように、あなたの問題があるのです。あなたが使用しているデータベースのタイプは瞬間のもので、あなたはそれを間違って酷使しています。 –