안드로이드 모바일에서 TimeZone을 얻는 방법?


139

버튼을 클릭 할 때 Android 모바일에서 시간대를 가져오고 싶습니다.


11
TimeZone tz = TimeZone.getDefault (); 문자열 gmt1 = TimeZone.getTimeZone (tz.getID ()). getDisplayName (false, TimeZone.SHORT); 문자열 gmt2 = TimeZone.getTimeZone (tz.getID ()). getDisplayName (false, TimeZone.LONG); Log.d ( "Tag", "TimeZone :"+ gmt1 + "\ t"+ gmt2); 그리고 이것은 코드입니다
asha v

10
나는 asha v에 너무 거칠지 않을 것입니다. 나는 똑같은 것을 찾고 있었고 내가 찾은 대답은 이것들과 다릅니다. 실제로 정확한 "TimeZone.getDefault"로 검색하면 여기로 이끌었습니다.
Yar

답변:


189

당신이 사용하는 것을 시도했다 TimeZone.getDefault():

대부분의 응용 프로그램은 TimeZone.getDefault () 를 사용 하여 프로그램이 실행되는 시간대를 기준으로 TimeZone을 반환합니다.

참조 : http://developer.android.com/reference/java/util/TimeZone.html


22
JodaTime을 사용 하는 경우 다음과 같이 DateTimeZone을 얻을 수 있습니다.DateTimeZone.forTimeZone(TimeZone.getDefault());
Joshua Pinter

@JoshPinter 어떤 패키지를 사용합니까, android.icu.utils 또는 java.util 중 하나입니까?
Neon Warge

1
시간대를 장치에서 CST로 변경했는데 CST를 돌려주지 않습니다. 장치의 시간대를 얻는 방법이 있습니까?
Abhinav Saxena

장치 시간대를 위조하는 경우 TimeZone.getDefault가 적용되는지 궁금합니다. 안드로이드 시뮬레이터에없는 것 같습니다.
Hau Luu

android.icu는 API 24 이상에서만 작동하지만 @NeonWarge 둘 다 작동합니다.
니콜라스

136
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());

산출:

TimeZone GMT + 09 : 30 Timezon id :: 오스트레일리아 / 다윈


@Flexo 안드로이드 장치에서 타임 스탬프를 얻는 방법
KOUSIK 다니엘

4
출력과 좋은 설명
Anand Savjani


14

나는 일광 절약 시간뿐만 아니라 숫자 로 포함 된 오프셋 이 필요했습니다 . 누군가가 예제를 찾고있는 경우에 사용한 코드는 다음과 같습니다.

나는 이란의 테헤란에서 겨울에는 "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);

1
나는 단지 스톱워치로서 지속 시간을 다루는 동안 나를 위해 일했다.
Ahsan

13

이 코드를 사용해보십시오

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();

사용자가 선택한 시간대를 반환합니다.


4
Calendar이것에 대한 객체를 만드는 것은 말도 안됩니다. 이 유형의 객체를 만드는 데 비용이 많이 듭니다. TimeZone.getDefault()이것을 얻는 적절한 방법입니다.
anonymous

3
@KrLx_roller 답을 내리기 전에주의 깊게 확인하십시오. TimeZone.getDefault ()는 설치 기본 시간대를 반환하지만 내 대답은 사용자가 선택한 시간대를 반환하도록 작성했습니다. 더 많은 정보하시기 바랍니다 code.google.com/p/android/issues/detail?id=2037을 .
anujprashar

코드는 android 4.2의 TimeZone.getDefault ()와 동일한 시간대를 반환합니다. TimeZone.getDefault ()는 설정-> 날짜 및 시간에서 선택한 시간대를 반환합니다.
user1088166

5
TimeZone timeZone = TimeZone.getDefault(); 
timeZone.getID();

다음과 같이 인쇄됩니다

Asia/Kolkata

3

간단한 날짜 형식의 가장 간단한 솔루션 : 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



2

java.time 및 ThreeTenABP의 ZoneId

현대 답변 :

    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 API 레벨 26이 필요하지 않습니까?

java.time은 구형 및 최신 Android 장치에서 잘 작동합니다. 최소한 Java 6 만 있으면됩니다 .

  • Java 8 이상 및 최신 Android 장치 (API 레벨 26부터)에는 최신 API가 내장되어 있습니다.
  • Android 이외의 Java 6 및 7에서는 최신 클래스의 백 포트 인 ThreeTen Backport를 가져옵니다 (ThreeTen for JSR 310; 맨 아래 링크 참조).
  • (구형) Android에서는 Android 버전의 ThreeTen Backport를 사용합니다. 이름이 ThreeTenABP입니다. org.threeten.bp하위 패키지 를 사용 하여 날짜 및 시간 클래스를 가져와야합니다 .

연결


1

API 26 이상이 설치된 장치의 경우 다음과 같이 얻을 수 있습니다.

ZonedDateTime.now().getZone().toString();

1

내 장치 TimeZone.getDefault()에서 항상 UTC 시간대를 반환합니다.

사용자 구성 시간대를 얻으려면이 작업을 수행해야합니다.

TimeZone.setDefault(null)
val tz = TimeZone.getDefault()

사용자가 선택한 시간대를 반환합니다.


0

여기에있는 모든 대답은 daylite 매개 변수를 false로 설정하는 것을 제안합니다 . 연중 시간에 따라 약어 이름을 변경하는 많은 시간대 (예 : EST vs EDT)에서는 올바르지 않습니다.

아래의 솔루션은 시간대의 현재 날짜에 따라 올바른 약어를 제공합니다.

val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)

TimeZone클래스는 잘못 설계 및 긴 구식입니다.
Ole VV
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.