ボタンをクリックしたときにAndroidモバイルからタイムゾーンを取得したい。
ボタンをクリックしたときにAndroidモバイルからタイムゾーンを取得したい。
回答:
使用してみましたかTimeZone.getDefault()
:
ほとんどのアプリケーションは、プログラムが実行されているタイムゾーンに基づいてTimeZoneを返すTimeZone.getDefault()を使用します。
参照:http : //developer.android.com/reference/java/util/TimeZone.html
DateTimeZone.forTimeZone(TimeZone.getDefault());
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());
出力:
TimeZone GMT + 09:30 Timezon id ::オーストラリア/ダーウィン
編集:ケースを修正
私は夏時間だけでなく、数値としてのオフセットも必要でした。これは、誰かが例を探している場合に使用するコードです。
テヘラン、イランでは冬、「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);
このコードを試してください
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
ユーザーが選択したタイムゾーンを返します。
Calendar
このためのオブジェクトを作成することはナンセンスです。このタイプのオブジェクトの作成にはコストがかかります。TimeZone.getDefault()
これを取得する適切な方法です。
シンプルな日付フォーマットを使用した最も簡単なソリューション: 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
http://developer.android.com/reference/android/text/format/Time.htmlによると、デバイスの現在のタイムゾーンを取得するにはTime.getCurrentTimezone()を使用する必要があります。
現代の答え:
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デバイスと新しいAndroidデバイスの両方でうまく機能します。少なくともJava 6が必要です。
org.threeten.bp
、サブパッケージを使用して日付と時刻のクラスをインポートしてください。java.time
最初に説明しました。java.time
Java 6および7(JSR-310用のThreeTen)へのバックポート。API 26以上のデバイスの場合、次のように取得できます。
ZonedDateTime.now().getZone().toString();
ここでのすべての回答は、dayliteパラメータをfalseに設定することを提案しているようです。これは、年間の時間に応じて省略名を変更する多くのタイムゾーン(ESTとEDTなど)では正しくありません。
以下の解決策は、タイムゾーンの現在の日付に応じた正しい省略形を提供します。
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
クラスは設計が不十分と長い時代遅れです。