Tôi muốn lấy múi giờ từ điện thoại di động Android khi nhấp vào nút.
Tôi muốn lấy múi giờ từ điện thoại di động Android khi nhấp vào nút.
Câu trả lời:
Bạn đã thử sử dụng TimeZone.getDefault()
:
Hầu hết các ứng dụng sẽ sử dụng TimeZone.getDefault () trả về TimeZone dựa trên múi giờ nơi chương trình đang chạy.
Tham chiếu: 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());
Đầu ra:
TimeZone GMT + 09: 30 Timezon id :: Úc / Darwin
Chỉnh sửa: sửa trường hợp
Tôi cần sự bù đắp không chỉ bao gồm thời gian tiết kiệm ánh sáng ban ngày mà còn như một con số . Đây là mã mà tôi đã sử dụng trong trường hợp ai đó đang tìm kiếm một ví dụ.
Tôi nhận được phản hồi là "3,5" (3:30 ') , đó là những gì tôi mong đợi ở Tehran, Iran vào mùa đông và "4,5" (4:30') cho mùa hè.
Tôi cũng cần nó như một chuỗi để tôi có thể đăng nó lên máy chủ để bạn có thể không cần dòng cuối cùng.
để có được múi giờ hiện tại:
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);
Hãy thử mã này-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Nó sẽ trả về múi giờ người dùng đã chọn.
Calendar
đối tượng cho điều này là vô nghĩa. Việc tạo ra loại đối tượng này là đắt tiền. TimeZone.getDefault()
là cách thích hợp để có được điều này.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Nó sẽ in như
Asia/Kolkata
Giải pháp đơn giản nhất với định dạng ngày đơn giản: 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 " );
==> Đầu ra là: +05: 30
Theo http://developer.android.com/reference/android/text/format/Time.html bạn nên sử dụng Time.getCienTimezone () để lấy múi giờ hiện tại của thiết bị.
Câu trả lời hiện đại:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Khi tôi chạy đoạn mã này theo múi giờ Úc / Sydney, đầu ra chính xác là:
Australia/Sydney
Nếu bạn muốn tên hoặc chữ viết tắt của múi giờ (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
Các TimeZone
lớp học được sử dụng trong hầu hết các câu trả lời khác là những gì chúng tôi đã có khi câu hỏi được hỏi trong năm 2011, mặc dù nó được thiết kế kém. Ngày nay nó đã lỗi thời và tôi khuyên rằng thay vì chúng ta sử dụng java.time, API ngày và giờ hiện đại của Java đã xuất hiện vào năm 2014.
java.time hoạt động độc đáo trên cả thiết bị Android cũ hơn và mới hơn. Nó chỉ cần ít nhất Java 6 .
org.threeten.bp
với các gói con.java.time
được mô tả lần đầu tiên.java.time
Java 6 và 7 (ThreeTen cho JSR-310).Đối với các thiết bị có API 26 trở lên, bạn có thể có được nó như thế này:
ZonedDateTime.now().getZone().toString();
Tất cả các câu trả lời ở đây dường như đề nghị đặt tham số daylite thành false . Điều này không chính xác đối với nhiều múi giờ thay đổi tên viết tắt tùy thuộc vào thời gian trong năm (ví dụ EST so với EDT).
Giải pháp dưới đây sẽ cung cấp cho bạn tên viết tắt chính xác theo ngày hiện tại cho múi giờ.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
lớp học là thiết kế kém và lâu lỗi thời.