現在の時刻を、Joda時刻を使用して特定のタイムゾーンの時刻に変換したいと思います。
特定のタイムゾーンに変換する方法はありますか、それとも他DateTime time = new DateTime()
のタイムゾーンとの時間差を取得して実行する方法はありますか?time.getZone()
DateTimeZone
time.minusHours
time.plusHours
現在の時刻を Joda 時間の特定のタイムゾーンの時刻に変換したいと考えています。
すでに現在の時刻を取得しているかどうかは明確ではありません。すでに取得している場合は、次を使用できますwithZone
。
DateTime zoned = original.withZone(zone);
現在の時刻を取得するだけの場合は、適切なコンストラクターを使用します。
DateTime zoned = new DateTime(zone);
または使用DateTime.now
:
DateTime zoned = DateTime.now(zone);
DateTimeZoneとIntervalをチェックしてください:
DateTime dt = new DateTime();
// translate to London local time
DateTime dtLondon = dt.withZone(DateTimeZone.forID("Europe/London"));
間隔:
Interval interval = new Interval(start, end); //start and end are two DateTimes
java.util
Date-Time API とその書式設定 APIはSimpleDateFormat
時代遅れで、エラーが発生しやすいものです。それらの使用を完全に停止し、最新の Date-Time APIに切り替えることをお勧めします*。
また、以下はJoda-Timeのホームページからの通知です。
Java SE 8 以降では、このプロジェクトを置き換える JDK のコア部分である java.time (JSR-310) に移行するように求められることに注意してください。
java.time
最新の Date-Time APIを使用したソリューション:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// ZonedDateTime.now() is same as ZonedDateTime.now(ZoneId.systemDefault()). In
// order to specify a specific timezone, use ZoneId.of(...) e.g.
// ZonedDateTime.now(ZoneId.of("Europe/London"));
ZonedDateTime zdtDefaultTz = ZonedDateTime.now();
System.out.println(zdtDefaultTz);
// Convert zdtDefaultTz to a ZonedDateTime in another timezone e.g.
// to ZoneId.of("America/New_York")
ZonedDateTime zdtNewYork = zdtDefaultTz.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println(zdtNewYork);
}
}
サンプル実行からの出力:
2021-07-25T15:48:10.584414+01:00[Europe/London]
2021-07-25T10:48:10.584414-04:00[America/New_York]
最新の Date-Time API の詳細については、Trail: Date Timeを参照してください。
* 何らかの理由で、Java 6 または Java 7 に固執する必要がある場合は、 java.time機能のほとんどを Java 6 & 7 にバックポートするThreeTen-Backportを使用できます。Androidプロジェクトと Android API で作業している場合レベルはまだ Java-8 に準拠していません。desugarで利用可能な Java 8+ APIと Android プロジェクトで ThreeTenABP を使用する方法 を確認してください。