How to get the timezone offset in GMT(Like GMT+7:00) from android device?
I am getting the timezone
of a android device using this code
TimeZone tz = TimeZone.getDefault();
String current_Time_Zone = (TimeZone.getTimeZone(tz.getID()).getDisplayName(
false, TimeZone.SHORT))
But it always return me the timezone
like "IST
" but i want to get the timezone in GMT
like this GMT+7:00.
Solution 1:
This might give you an idea on how to implement it to your liking:
Calendar mCalendar = new GregorianCalendar();
TimeZone mTimeZone = mCalendar.getTimeZone();
int mGMTOffset = mTimeZone.getRawOffset();
System.out.printf("GMT offset is %s hours", TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS));
(TimeUnit is "java.util.concurrent.TimeUnit")
Solution 2:
This code return me GMT offset.
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("Z");
String localTime = date.format(currentLocalTime);
It returns the time zone offset like this: +0530
If we use SimpleDateFormat below
DateFormat date = new SimpleDateFormat("z",Locale.getDefault());
String localTime = date.format(currentLocalTime);
It returns the time zone offset like this: GMT+05:30
Solution 3:
Here is a solution to get timezone offset in GMT+05:30 this format
public String getCurrentTimezoneOffset() {
TimeZone tz = TimeZone.getDefault();
Calendar cal = GregorianCalendar.getInstance(tz);
int offsetInMillis = tz.getOffset(cal.getTimeInMillis());
String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60));
offset = "GMT"+(offsetInMillis >= 0 ? "+" : "-") + offset;
return offset;
}
Solution 4:
public static String timeZone()
{
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
String timeZone = new SimpleDateFormat("Z").format(calendar.getTime());
return timeZone.substring(0, 3) + ":"+ timeZone.substring(3, 5);
}
returns like +03:30
Solution 5:
a one line solution is to use the Z
symbol like:
new SimpleDateFormat(pattern, Locale.getDefault()).format(System.currentTimeMillis());
where pattern
could be:
- Z/ZZ/ZZZ: -0800
- ZZZZ: GMT-08:00
- ZZZZZ: -08:00
full reference here:
http://developer.android.com/reference/java/text/SimpleDateFormat.html