Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get TimeZone from android mobile?

People also ask

How do I get GMT time zone?

d("Tag","TimeZone : "+gmt1+"\t"+gmt2);

How do I set UTC time zone on Android?

To change to UTC on a standard Android device, tap Settings | System | Date & Time, then turn off the Use-Network Provided Time Zone option, tap the Time Zone and search for Iceland, then tap the back arrow in the upper-left.

How do I change the default timezone on Android?

setDefault(TimeZone. getTimeZone("GMT+3")); This sets the default timezone.


Have you tried to use TimeZone.getDefault():

Most applications will use TimeZone.getDefault() which returns a TimeZone based on the time zone where the program is running.

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


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

Output:

TimeZone GMT+09:30 Timezone id :: Australia/Darwin


Edit: corrected the case

TimeZone.getDefault()


I needed the offset that not only included day light savings time but as a numerial. Here is the code that I used in case someone is looking for an example.

I get a response of "3.5" (3:30') which is what I would expect in Tehran , Iran in winter and "4.5" (4:30') for summer .

I also needed it as a string so I could post it to a server so you may not need the last line.

for getting currect time zone :

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);

Try this code-

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

It will return user selected timezone.


ZoneId from java.time and ThreeTenABP

Modern answer:

    ZoneId zone = ZoneId.systemDefault();
    System.out.println(zone);

When I ran this snippet in Australia/Sydney time zone, the output was exactly that:

Australia/Sydney

If you want the summer time (DST) aware time zone name or abbreviation:

    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

The TimeZone class used in most of the other answers was what we had when the question was asked in 2011, even though it was poorly designed. Today it’s long outdated, and I recommend that instead we use java.time, the modern Java date and time API that came out in 2014.

Question: Doesn’t java.time require Android API level 26?

java.time works nicely on both older and newer Android devices. It just requires at least Java 6.

  • In Java 8 and later and on newer Android devices (from API level 26) the modern API comes built-in.
  • In non-Android Java 6 and 7 get the ThreeTen Backport, the backport of the modern classes (ThreeTen for JSR 310; see the links at the bottom).
  • Edit: On (older) Android usually, as long as you're on Android Gradle plugin 4.0 or newer, with coreLibraryDesugaring you can use java.time directly. ThreeTenABP is no longer needed. (Previous bullet: use the Android edition of ThreeTen Backport. It’s called ThreeTenABP. And make sure you import the date and time classes from org.threeten.bp with subpackages.)

Links

  • Oracle tutorial: Date Time explaining how to use java.time.
  • Java Specification Request (JSR) 310, where java.time was first described.
  • ThreeTen Backport project, the backport of java.time to Java 6 and 7 (ThreeTen for JSR-310).
  • ThreeTenABP, Android edition of ThreeTen Backport
  • Question: How to use ThreeTenABP in Android Project, with a very thorough explanation.