TimeZone tz = TimeZone.getDefault (); String gmt1 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.SHORT); String gmt2 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.LONG); Log.d ("Tag", "TimeZone:" + gmt1 + "\ t" + gmt2); Dan ini adalah kode
asha v
10
Saya tidak akan terlalu kasar pada asha v. Saya hanya mencari hal yang sama dan jawaban yang saya temukan berbeda dari yang ini. Sebenarnya mencari dengan "TimeZone.getDefault" yang tepat membawa saya ke sini.
Yar
Jawaban:
196
Sudahkah Anda mencoba menggunakan TimeZone.getDefault():
Sebagian besar aplikasi akan menggunakan TimeZone.getDefault () yang mengembalikan TimeZone berdasarkan zona waktu tempat program berjalan.
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 numberdouble offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);
Membuat Calendarobjek untuk ini adalah omong kosong. Pembuatan objek jenis ini mahal. TimeZone.getDefault()adalah cara yang tepat untuk mendapatkannya.
anonim
3
@KrLx_roller Harap periksa dengan cermat sebelum menurunkan jawaban. Saya telah menulis jawaban saya mengembalikan zona waktu yang dipilih pengguna sedangkan TimeZone.getDefault () akan mengembalikan zona waktu default instalasi. Untuk info lebih lanjut silakan code.google.com/p/android/issues/detail?id=2037 .
anujprashar
Kode Anda mengembalikan zona waktu yang sama dengan TimeZone.getDefault () di android 4.2. TimeZone.getDefault () akan mengembalikan zona waktu yang dipilih dalam pengaturan -> tanggal & waktu.
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.
Pertanyaan: Bukankah java.time memerlukan Android API level 26?
java.time bekerja dengan baik di perangkat Android lama dan lebih baru. Ini hanya membutuhkan setidaknya Java 6 .
Di Java 8 dan yang lebih baru dan pada perangkat Android yang lebih baru (dari API level 26), API modern sudah ada di dalamnya.
Di non-Android Java 6 dan 7 dapatkan ThreeTen Backport, backport kelas modern (ThreeTen untuk JSR 310; lihat tautan di bagian bawah).
Di Android (lebih lama), gunakan ThreeTen Backport edisi Android. Ini disebut ThreeTenABP. Dan pastikan Anda mengimpor kelas tanggal dan waktu dari org.threeten.bpdengan subpaket.
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)
Jawaban:
Sudahkah Anda mencoba menggunakan
TimeZone.getDefault()
:Ref: http://developer.android.com/reference/java/util/TimeZone.html
sumber
DateTimeZone.forTimeZone(TimeZone.getDefault());
TimeZone tz = TimeZone.getDefault(); System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());
Keluaran:
sumber
Edit: kasus diperbaiki
TimeZone.getDefault()
sumber
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);
sumber
Coba kode ini-
Ini akan mengembalikan zona waktu yang dipilih pengguna.
sumber
Calendar
objek untuk ini adalah omong kosong. Pembuatan objek jenis ini mahal.TimeZone.getDefault()
adalah cara yang tepat untuk mendapatkannya.Ini akan mencetak seperti
sumber
ZoneId dari java.time dan ThreeTenABP
Jawaban modern:
Ketika saya menjalankan cuplikan ini di zona waktu Australia / Sydney, hasilnya persis seperti itu:
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);
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.Pertanyaan: Bukankah java.time memerlukan Android API level 26?
java.time bekerja dengan baik di perangkat Android lama dan lebih baru. Ini hanya membutuhkan setidaknya Java 6 .
org.threeten.bp
dengan subpaket.Tautan
java.time
pertama kali dijelaskan.java.time
ke Java 6 dan 7 (ThreeTen untuk JSR-310).sumber
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
sumber
Menurut http://developer.android.com/reference/android/text/format/Time.html Anda harus menggunakan Time.getCurrentTimezone () untuk mengambil zona waktu perangkat saat ini.
sumber
Di perangkat saya
TimeZone.getDefault()
selalu mengembalikan zona waktu UTC.Saya perlu melakukan ini untuk mendapatkan zona waktu yang dikonfigurasi pengguna:
TimeZone.setDefault(null) val tz = TimeZone.getDefault()
Ini akan mengembalikan zona waktu yang dipilih pengguna.
sumber
Untuk perangkat dengan API 26 dan lebih tinggi, Anda bisa mendapatkannya seperti ini:
sumber
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.
sumber
TimeZone
kelas buruk dirancang dan panjang usang.