11

現在の時刻を、Joda時刻を使用して特定のタイムゾーンの時刻に変換したいと思います。

特定のタイムゾーンに変換する方法はありますか、それとも他DateTime time = new DateTime()のタイムゾーンとの時間差を取得して実行する方法はありますか?time.getZone()DateTimeZonetime.minusHourstime.plusHours

4

3 に答える 3

28

現在の時刻を Joda 時間の特定のタイムゾーンの時刻に変換したいと考えています。

すでに現在の時刻を取得しているかどうかは明確ではありません。すでに取得している場合は、次を使用できますwithZone

DateTime zoned = original.withZone(zone);

現在の時刻を取得するだけの場合は、適切なコンストラクターを使用します。

DateTime zoned = new DateTime(zone);

または使用DateTime.now

DateTime zoned = DateTime.now(zone);
于 2012-07-24T11:35:11.380 に答える
10

DateTimeZoneIntervalをチェックしてください:

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
于 2012-07-24T11:36:30.637 に答える
1

java.time

java.utilDate-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]

ONLINE DEMO

最新の 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 を使用する方法 を確認してください。

于 2021-07-25T14:48:54.200 に答える