ฉันต้องการรับเขตเวลาจากมือถือ Android เมื่อคลิกปุ่ม
ฉันต้องการรับเขตเวลาจากมือถือ Android เมื่อคลิกปุ่ม
คำตอบ:
คุณเคยลองใช้TimeZone.getDefault()
:
แอปพลิเคชั่นส่วนใหญ่จะใช้TimeZone.getDefault ()ซึ่งคืนค่า TimeZone ตามโซนเวลาที่โปรแกรมกำลังทำงาน
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());
เอาท์พุท:
TimeZone GMT + 09: 30 Timezon id :: ออสเตรเลีย / ดาร์วิน
แก้ไข: แก้ไขกรณีและปัญหา
ผมจำเป็นต้องมีการชดเชยเวลาที่ไม่เพียง แต่รวมวันเงินฝากออมทรัพย์แสง แต่เป็นnumerial นี่คือรหัสที่ฉันใช้ในกรณีที่มีคนมองหาตัวอย่าง
ฉันได้รับคำตอบของ"3.5" (3:30 ')ซึ่งเป็นสิ่งที่ฉันคาดหวังในเตหะรานอิหร่านในฤดูหนาวและ"4.5" (4: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()
เป็นวิธีที่เหมาะสมในการรับสิ่งนี้
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
มันจะพิมพ์เหมือน
Asia/Kolkata
โซลูชันที่ง่ายที่สุดด้วยรูปแบบวันที่ที่เรียบง่าย: 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 แม้ว่าจะได้รับการออกแบบมาไม่ดี วันนี้มันล้าสมัยไปแล้วและผมขอแนะนำให้เราใช้ java.time แทน API วันที่และเวลาของ Java สมัยใหม่ที่ออกมาในปี 2014
java.time ทำงานได้ดีบนอุปกรณ์ Android ที่เก่ากว่าและใหม่กว่า มันก็ต้องมีอย่างน้อยJava 6
org.threeten.bp
ด้วยแพ็คเกจย่อยjava.time
ถูกอธิบายครั้งแรกjava.time
ไปยัง Java 6 และ 7 (ThreeTen สำหรับ JSR-310)สำหรับอุปกรณ์ที่มี API 26 ขึ้นไปคุณจะได้รับสิ่งนี้:
ZonedDateTime.now().getZone().toString();
บนอุปกรณ์ของฉันTimeZone.getDefault()
กลับมาเสมอโซนเวลา UTC
ฉันต้องทำสิ่งนี้เพื่อให้ได้เขตเวลาที่ผู้ใช้กำหนด:
TimeZone.setDefault(null)
val tz = TimeZone.getDefault()
มันจะกลับเขตเวลาที่ผู้ใช้เลือก
คำตอบทั้งหมดที่นี่ดูเหมือนจะแนะนำให้ตั้งค่าพารามิเตอร์ daylite เป็น เป็นเท็จเท็จสิ่งนี้ไม่ถูกต้องสำหรับเขตเวลาจำนวนมากที่เปลี่ยนชื่อตัวย่อโดยขึ้นอยู่กับช่วงเวลาของปี (เช่น EST กับ EDT)
การแก้ปัญหาด้านล่างจะให้ตัวย่อที่ถูกต้องตามวันที่ปัจจุบันของเขตเวลา
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
ชั้นถูกออกแบบมาไม่ดีและล้าสมัยยาว