Saya ingin mendapatkan zona waktu dari ponsel Android saat mengklik tombol.
Saya ingin mendapatkan zona waktu dari ponsel Android saat mengklik tombol.
Jawaban:
Sudahkah Anda mencoba menggunakan TimeZone.getDefault()
:
Sebagian besar aplikasi akan menggunakan TimeZone.getDefault () yang mengembalikan TimeZone berdasarkan zona waktu tempat program berjalan.
Ref: 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());
Keluaran:
TimeZone GMT + 09: 30 Timezon id :: Australia / Darwin
Edit: kasus diperbaiki
Saya membutuhkan offset yang tidak hanya mencakup waktu penghematan siang hari tetapi juga sebagai numerial . Berikut adalah kode yang saya gunakan jika ada yang mencari contoh.
Saya mendapat jawaban "3.5" (3:30 ') yang saya harapkan di Teheran, Iran pada musim dingin dan "4,5" (4:30') untuk musim panas.
Saya juga membutuhkannya sebagai string sehingga saya dapat mempostingnya ke server sehingga Anda mungkin tidak memerlukan baris terakhir.
untuk mendapatkan zona waktu saat ini:
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);
Coba kode ini-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Ini akan mengembalikan zona waktu yang dipilih pengguna.
Calendar
objek untuk ini adalah omong kosong. Pembuatan objek jenis ini mahal. TimeZone.getDefault()
adalah cara yang tepat untuk mendapatkannya.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Ini akan mencetak seperti
Asia/Kolkata
Jawaban modern:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Ketika saya menjalankan cuplikan ini di zona waktu Australia / Sydney, hasilnya persis seperti itu:
Australia/Sydney
Jika Anda ingin nama atau singkatan zona waktu yang sadar waktu musim panas (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
Itu TimeZone
kelas yang digunakan di sebagian besar jawaban yang lain adalah apa yang kita miliki saat pertanyaan diajukan pada 2011, meskipun itu buruk dirancang. Hari ini sudah lama usang, dan saya merekomendasikan agar kita menggunakan java.time, API tanggal dan waktu Java modern yang keluar pada tahun 2014.
java.time bekerja dengan baik di perangkat Android lama dan lebih baru. Ini hanya membutuhkan setidaknya Java 6 .
org.threeten.bp
dengan subpaket.java.time
pertama kali dijelaskan.java.time
ke Java 6 dan 7 (ThreeTen untuk JSR-310).Solusi Paling Sederhana Dengan Format Tanggal Sederhana: 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 " );
==> Outputnya adalah: +05: 30
Menurut http://developer.android.com/reference/android/text/format/Time.html Anda harus menggunakan Time.getCurrentTimezone () untuk mengambil zona waktu perangkat saat ini.
Untuk perangkat dengan API 26 dan lebih tinggi, Anda bisa mendapatkannya seperti ini:
ZonedDateTime.now().getZone().toString();
Semua jawaban di sini tampaknya menyarankan pengaturan parameter daylite ke false . Ini tidak benar untuk banyak zona waktu yang mengubah nama singkatan tergantung pada waktu tahun (mis. EST vs EDT).
Solusi di bawah ini akan memberi Anda singkatan yang benar menurut tanggal saat ini untuk zona waktu.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
kelas buruk dirancang dan panjang usang.