1

こんにちは、私はこのコードの抜粋を持っています:

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によると、 long型から期間を作成することが可能であるため、 getTime()であるにもかかわらず、これがなぜなのかわかりません。( preTimepostTimejava.sql.Time型です)

4

2 に答える 2

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 ドライバーによってタイムゾーン オフセットが導入されたように見えますが、次のように変換することで簡単に補正できますjava.sql.Time(LocalTimeも同様です)。

LocalTime lt = new LocalTime(time);

LocalTime次に、期間に変換できます。

Duration d = new Duration(lt.getMillisOfDay());
于 2012-04-12T11:45:30.677 に答える
2

持続時間として瞬間を使用する場合、開始が間違っていませんか? 使用しているコンストラクターの署名はDuration(long duration)、ではなくDuration(long startInstant)、実際にはそのようなコンストラクターはありません。

于 2012-04-12T11:27:50.167 に答える