他の回答は機能し、2010年にはすばらしい回答でしたが、私は最新の回答を提供しています。
java.timeおよびThreeTenABP
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
ZoneId zone = ZoneId.systemDefault();
String startDateString = "2019-12-31 23:34:45";
String endDateString = "2020-01-01 07:56:34";
ZonedDateTime start = LocalDateTime.parse(startDateString, formatter).atZone(zone);
ZonedDateTime end = LocalDateTime.parse(endDateString, formatter).atZone(zone);
long diffSeconds = ChronoUnit.SECONDS.between(start, end);
System.out.println("Difference: " + diffSeconds + " seconds");
ほとんどのタイムゾーンで、このスニペットから出力されるのは次のとおりです。
違い:30109秒
ZonedDateTime夏時間(DST)への移行と夏時間からの移行、およびその他の時間の異常を考慮に入れているため、私は使用しています。もちろん、正しいタイムゾーンを使用する必要があります。日付と時刻をデータベースに保存してからデバイスのタイムゾーン設定を変更すると、予期しない事態が発生する可能性があります。このようなことを防ぐために、UTCオフセットを時刻とともに保存しOffsetDateTime、取得時にそれらを解析することができます。
質問:java.timeはAndroid APIレベル26を必要としませんか?
java.timeは、古いAndroidデバイスと新しいAndroidデバイスの両方でうまく機能します。少なくともJava6が必要です。
- Java 8以降および新しいAndroidデバイス(APIレベル26以降)では、最新のAPIが組み込まれています。
- Android以外のJava6および7では、最新のクラスのバックポートであるThreeTenバックポートを取得します(JSR 310の場合はThreeTen。下部のリンクを参照してください)。
- (古い)Androidでは、Android版のThreeTenBackportを使用します。それはThreeTenABPと呼ばれています。
org.threeten.bpまた、サブパッケージを使用して日付と時刻のクラスをインポートするようにしてください。
リンク