3

そのため、Java 1.8にはjava.time.Instant、時間計算を管理するためのまったく新しい (および古い) 一連のクラスが付属しています。java.time.LocalTimejava.time.temporal.ChronoUnit

しかし、これらの時間差を計算する簡単な方法がないのはなぜでしょうか? 「time_later - time_earlier」が最もよく使用される時間の操作であると予想されますが、これはどこにも見られません。LocalTime を別の LocalTime から差し引いて、新しい LocalTime を取得することはできません。あるインスタントを別のインスタントから差し引いて新しいインスタントを取得することはできません。代わりに、この非常に便利なことを実現するには、ChronoUnits. between と長いミリ秒などをいじる必要があります。

どうしてこれなの?私が得られない何かが起こっている必要がありますか?それとも私がバカなの...?

4

4 に答える 4

4

Java 8 より前は、あなたの質問に対する通常の答えは「Joda Time を使用する」でした。

しかし、Joda Time (Stephen Colebourne) の作者は、Java 8 の新しい time クラスとメソッドに深く関わっていました。2 つの非常に優れた記事を次に示します。

特定の質問については、Java 8 の "Duration" と "LocalTime"、"LocalDate" および/または "LocalTimeDate" (他のオプションの中でも) を検討することをお勧めします。

// A duration of 3 seconds and 5 nanoseconds
Duration duration = Duration.ofSeconds(3, 5);
Duration oneDay = Duration.between(today, yesterday);

// Tomorrow
LocalDate tomorrow = LocalDate.now().plusDays(1);

// Yesterday
LocalDate yesterday = LocalDate.now().plusDays(-1);

// before 5 houres and 30 minutes
LocalDateTime dateTime = LocalDateTime.now().minusHours(5).minusMinutes(30);
于 2014-06-29T07:29:44.020 に答える
0

を使用することで、必要な機能を取得できますjava.time.Instant.toEpochMilli()。これにより、古い と同じ機能が得られますjava.util.Date.getTime()

タイムゾーンに対処する必要がない限り、これでInstant十分です。残りのすべてのものに惑わされないでください。

タイム ゾーンを処理する必要がある場合は、かなりの複雑さが必要になりますが、過度に一般化されているため、パッケージがさらに複雑になります。

于 2014-06-28T22:08:31.100 に答える