Bir düğmeyi tıkladığınızda Android cep telefonundan saat dilimi almak istiyorum.
Bir düğmeyi tıkladığınızda Android cep telefonundan saat dilimi almak istiyorum.
Yanıtlar:
Kullanmaya çalıştınız mı TimeZone.getDefault()
:
Çoğu uygulama , programın çalıştığı saat dilimine göre bir TimeZone döndüren TimeZone.getDefault () yöntemini kullanır .
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());
Çıktı:
Saat Dilimi GMT + 09: 30 Timezon kimliği :: Avustralya / Darwin
Düzenle: dava düzeltildi
Ben gerekli ofset sadece dahil gün ışığı tasarruf süresini olduğunu ancak olarak numerial . İşte birisi örnek aramak durumunda kullandığım kod.
Tahran, İran'da kışın beklediğim "3.5" (3:30 ') ve yaz için "4.5" (4:30') yanıtı alıyorum .
Ben de bir dize olarak gerekli böylece son satır gerek olmayabilir bir sunucuya gönderebilir.
akım saat dilimi almak için:
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);
Bu kodu deneyin-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Kullanıcı tarafından seçilen saat dilimini döndürür.
Calendar
için bir nesne yaratmak saçmalıktır. Bu tür nesnelerin oluşturulması pahalıdır. TimeZone.getDefault()
bunu elde etmenin uygun yoludur.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Gibi yazdırılacak
Asia/Kolkata
Basit Tarih Formatıyla En Basit Çözüm: 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 " );
==> Çıktı: +05: 30
Göre http://developer.android.com/reference/android/text/format/Time.html cihazın şimdiki zaman dilimini almak için Time.getCurrentTimezone () kullanılarak yapılmalıdır.
Modern cevap:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Bu snippet'i Avustralya / Sidney saat diliminde çalıştırdığımda çıktı tam olarak şuydu:
Australia/Sydney
Yaz saati (DST) saat dilimi adını veya kısaltmasını istiyorsanız:
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
Diğer cevapların çoğunda kullanılan sınıf soru 2011 yılında sorulduğunda biz kötü tasarlanmış olmasına rağmen, ne vardı oldu. Bugün çok eskidir ve bunun yerine 2014 yılında çıkan modern Java tarih ve saat API'sı java.time'ı kullanmanızı öneririz.
java.time hem eski hem de yeni Android cihazlarda güzel çalışıyor. Sadece en az Java 6 gerektirir .
org.threeten.bp
alt paketlerle aldığınızdan emin olun .java.time
ilk tarif edildi.java.time
Java 6 ve 7'nin backport'u (JSR-310 için ThreeTen).API 26 ve sonraki sürümlere sahip cihazlar için şu şekilde alabilirsiniz:
ZonedDateTime.now().getZone().toString();
Buradaki tüm cevaplar daylite parametresinin false olarak ayarlanmasını önermektedir . Bu, yılın zamanına bağlı olarak kısaltılmış adları değiştiren birçok zaman dilimi için yanlıştır (örn. EST ve EDT).
Aşağıdaki çözüm, saat diliminin geçerli tarihine göre size doğru kısaltmayı verecektir.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
Sınıf kötü tasarlanmış ve uzun modası geçmiş olduğunu.