AndroidモバイルからTimeZoneを取得する方法?


139

ボタンをクリックしたときにAndroidモバイルからタイムゾーンを取得したい。


11
TimeZone tz = TimeZone.getDefault(); 文字列gmt1 = TimeZone.getTimeZone(tz.getID())。getDisplayName(false、TimeZone.SHORT); 文字列gmt2 = TimeZone.getTimeZone(tz.getID())。getDisplayName(false、TimeZone.LONG); Log.d( "Tag"、 "TimeZone:" + gmt1 + "\ t" + gmt2); そして、これはコードです
Vアシャ

10
私はアーシャvでそれほどラフではないでしょう。私は同じものを探していただけで、見つけた答えはこれらのものとは異なりました。実際に正確な「TimeZone.getDefault」で検索すると、ここに誘導されます。
Yar

回答:


189

使用してみましたかTimeZone.getDefault()

ほとんどのアプリケーションは、プログラムが実行されているタイムゾーンに基づいてTimeZoneを返すTimeZone.getDefault()を使用します。

参照:http : //developer.android.com/reference/java/util/TimeZone.html


22
あなたが使用している場合JodaTimeを:あなたは、次のようにDateTimeZoneをを得ることができますDateTimeZone.forTimeZone(TimeZone.getDefault());
ジョシュア・ピンター

@JoshPinterどのパッケージを使用しますか?android.icu.utilsまたはjava.utilのパッケージですか?
ネオンWarge 16

1
時間帯をデバイスからCSTに変更しましたが、CSTが返されません。デバイスのタイムゾーンを取得する方法はありますか?
Abhinav Saxena 2017

どういうわけか、デバイスのタイムゾーンを偽造した場合、TimeZone.getDefaultは影響を受けますか?Androidシミュレータにはないようです。
ハウルウ

136
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());

出力:

TimeZone GMT + 09:30 Timezon id ::オーストラリア/ダーウィン


@Flexo Androidデバイスからタイムスタンプを取得する方法
KOUSIKダニエル2015

4
出力付きの優れた説明
Anand Savjani


14

私は夏時間だけでなく、数値としてのオフセットも必要でした。これは、誰かが例を探している場合に使用するコードです。

テヘラン、イランでは冬、「4.5」(4:30 ')は夏に期待する"3.5"(3:30')の応答が返されます。

文字列としても必要だったので、サーバーに投稿して、最後の行が不要になるようにしました。

正しいタイムゾーンを取得するため:

TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);

1
(ストップウォッチとして)継続時間を処理しているだけだったので、それは私にとってはうまくいきました。
Ahsan

13

このコードを試してください

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();

ユーザーが選択したタイムゾーンを返します。


4
Calendarこのためのオブジェクトを作成することはナンセンスです。このタイプのオブジェクトの作成にはコストがかかります。TimeZone.getDefault()これを取得する適切な方法です。
匿名の

3
@KrLx_roller回答を反対票を投じる前に注意深く確認してください。TimeZone.getDefault()がインストール時のデフォルトのタイムゾーンを返すのに対して、私の回答はユーザーが選択したタイムゾーンを返します。詳細については、code.google.com/p/android/issues/detail?id=2037をご覧ください。
anujprashar 2013

コードは、Android 4.2のTimeZone.getDefault()と同じタイムゾーンを返します。TimeZone.getDefault()は、設定->日付と時刻で選択されたタイムゾーンを返します。
user1088166 2013年


3

シンプルな日付フォーマットを使用した最も簡単なソリューション: SimpleDateFormat( "ZZZZZ"):

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
                Locale.getDefault());
        Date currentLocalTime = calendar.getTime();

        DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
        String localTime = date.format(currentLocalTime);
        System.out.println(localTime+ "  TimeZone   " );

==>出力は+05:30



2

java.timeおよびThreeTenABPのZoneId

現代の答え:

    ZoneId zone = ZoneId.systemDefault();
    System.out.println(zone);

このスニペットをオーストラリア/シドニーのタイムゾーンで実行すると、出力は次のようになります。

Australia/Sydney

サマータイム(DST)対応のタイムゾーン名または略称が必要な場合:

    DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
    String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
    System.out.println(longTz);

    DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
    String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
    System.out.println(shortTz);
Eastern Summer Time (New South Wales)
EST

TimeZone他のほとんどの回答で使用されたクラスは、デザインが不十分であったとしても、2011年に質問があったときのクラスでした。今日は古くなっており、代わりに、2014年にリリースされた最新のJava日時APIであるjava.timeを使用することをお勧めします。

質問:java.timeはAndroid APIレベル26を必要としませんか?

java.timeは、古いAndroidデバイスと新しいAndroidデバイスの両方でうまく機能します。少なくともJava 6が必要です。

  • Java 8以降および新しいAndroidデバイス(APIレベル26以降)では、最新のAPIが組み込まれています。
  • Android以外のJava 6および7では、最新のクラスのバックポートであるThreeTenバックポートを取得します(JSR 310用のThreeTen。下部のリンクを参照)。
  • (古い)Androidでは、ThreeTenバックポートのAndroidエディションを使用します。これはThreeTenABPと呼ばれます。またorg.threeten.bp、サブパッケージを使用して日付と時刻のクラスをインポートしてください。

リンク集



1

私のデバイスでTimeZone.getDefault()は常にUTCタイムゾーンが返されます。

ユーザーが構成したタイムゾーンを取得するには、これを行う必要があります。

TimeZone.setDefault(null)
val tz = TimeZone.getDefault()

ユーザーが選択したタイムゾーンを返します。


0

ここでのすべての回答は、dayliteパラメータをfalseに設定することを提案しているようです。これは、年間の時間に応じて省略名を変更する多くのタイムゾーン(ESTとEDTなど)では正しくありません。

以下の解決策は、タイムゾーンの現在の日付に応じた正しい省略形を提供します。

val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)

TimeZoneクラスは設計が不十分と長い時代遅れです。
Ole VV
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.