버튼을 클릭 할 때 Android 모바일에서 시간대를 가져오고 싶습니다.
버튼을 클릭 할 때 Android 모바일에서 시간대를 가져오고 싶습니다.
답변:
당신이 사용하는 것을 시도했다 TimeZone.getDefault()
:
대부분의 응용 프로그램은 TimeZone.getDefault () 를 사용 하여 프로그램이 실행되는 시간대를 기준으로 TimeZone을 반환합니다.
참조 : 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 :: 오스트레일리아 / 다윈
편집 : 사건 수정
나는 일광 절약 시간뿐만 아니라 숫자 로 포함 된 오프셋 이 필요했습니다 . 누군가가 예제를 찾고있는 경우에 사용한 코드는 다음과 같습니다.
나는 이란의 테헤란에서 겨울에는 "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()
이것을 얻는 적절한 방법입니다.
간단한 날짜 형식의 가장 간단한 솔루션 : 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 년 물었다 때 우리는 그것이 잘못 설계에도 불구하고, 무엇을했다이었다. 오늘날은 오래되어 오래되었지만 2014 년에 나온 최신 Java 날짜 및 시간 API 인 java.time을 대신 사용하는 것이 좋습니다.
java.time은 구형 및 최신 Android 장치에서 잘 작동합니다. 최소한 Java 6 만 있으면됩니다 .
org.threeten.bp
하위 패키지 를 사용 하여 날짜 및 시간 클래스를 가져와야합니다 .java.time
설명되었다.java.time
Java 6 및 7 의 백 포트 인 ThreeTen Backport 프로젝트 (ThreeTen for JSR-310).여기에있는 모든 대답은 daylite 매개 변수를 false로 설정하는 것을 제안합니다 . 연중 시간에 따라 약어 이름을 변경하는 많은 시간대 (예 : EST vs EDT)에서는 올바르지 않습니다.
아래의 솔루션은 시간대의 현재 날짜에 따라 올바른 약어를 제공합니다.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
클래스는 잘못 설계 및 긴 구식입니다.