通常、アジア/コルカタのようなタイムゾーンから+05:30や+07:00のようなGMTオフセットに変換することはできません。タイムゾーンは、その名前が示すように、地球上の場所であり、その場所の人々が使用する歴史的、現在、および既知の将来のUTCオフセットで構成されます(現時点では、GMTとUTCを同義語と見なすことができますが、厳密にはそうではありません)。 。たとえば、アジア/コルカタは1945年以来オフセット+05:30になっています。1941年から1945年の間は、+ 06:30であり、それ以前は+05:53:20でした(はい、秒の精度で)。他の多くのタイムゾーンには夏時間があり(夏時間、DST)、オフセットは年に2回変更されます。
ただし、ある時点を指定すると、その特定の時点の翻訳を行うことができます。私はそれを行うための現代的な方法を提供したいと思います。
java.timeおよびThreeTenABP
ZoneId zone = ZoneId.of("Asia/Kolkata");
ZoneOffset offsetIn1944 = LocalDateTime.of(1944, Month.JANUARY, 1, 0, 0)
.atZone(zone)
.getOffset();
System.out.println("Offset in 1944: " + offsetIn1944);
ZoneOffset offsetToday = OffsetDateTime.now(zone)
.getOffset();
System.out.println("Offset now: " + offsetToday);
今実行中の出力は次のとおりです。
Offset in 1944: +06:30
Offset now: +05:30
デフォルトのタイムゾーンは。に設定さzone
れていZoneId.systemDefault()
ます。
オフセットをテキストでフォーマットするには、パターンに(4つの大文字O)をGMT
含むフォーマッターを使用します。OOOO
DateTimeFormatter offsetFormatter = DateTimeFormatter.ofPattern("OOOO");
System.out.println(offsetFormatter.format(offsetToday));
GMT + 05:30
私は推奨しており、コードでは最新のJava日時APIであるjava.timeを使用しています。他の多くの回答で使用されている、、、、およびクラスはTimeZone
、設計が不十分で、現在は古くなっているため、これらすべてを回避することをお勧めします。Calendar
Date
SimpleDateFormat
DateFormat
質問:Androidでjava.timeを使用できますか?
はい、java.timeは古いAndroidデバイスと新しいAndroidデバイスでうまく機能します。少なくともJava6が必要です。
- Java 8以降および新しいAndroidデバイス(APIレベル26以降)では、最新のAPIが組み込まれています。
- Java 6および7では、最新のクラスのバックポートであるThreeTenバックポートを取得します(JSR 310の場合はThreeTen。下部のリンクを参照してください)。
- (古い)Androidでは、Android版のThreeTenBackportを使用します。それはThreeTenABPと呼ばれています。
org.threeten.bp
また、サブパッケージを使用して日付と時刻のクラスをインポートするようにしてください。
リンク