我正在timezone使用此代码获取Android设备
TimeZone tz = TimeZone.getDefault();
String current_Time_Zone = (TimeZone.getTimeZone(tz.getID()).getDisplayName(
false, TimeZone.SHORT))
Run Code Online (Sandbox Code Playgroud)
但它总是让我timezone像" IST",但我想得到GMT像这样的时区GMT+7:00.
kad*_*rud 73
这可能会让您了解如何根据自己的喜好实现它:
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));
Run Code Online (Sandbox Code Playgroud)
(TimeUnit是"java.util.concurrent.TimeUnit")
Nav*_*mar 52
此代码返回GMT偏移量.
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("Z");
String localTime = date.format(currentLocalTime);
Run Code Online (Sandbox Code Playgroud)
它返回时区偏移量,如下所示:+0530
如果我们在下面使用SimpleDateFormat
DateFormat date = new SimpleDateFormat("z",Locale.getDefault());
String localTime = date.format(currentLocalTime);
Run Code Online (Sandbox Code Playgroud)
它返回时区偏移量,如下所示:GMT + 05:30
Yog*_*uru 24
这是一种解决方案,以GMT + 05:30格式获取时区偏移量
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;
}
Run Code Online (Sandbox Code Playgroud)
XXX*_*XXX 16
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);
}
Run Code Online (Sandbox Code Playgroud)
返回 +03:30
Fel*_*rte 11
一行解决方案是使用如下Z符号:
new SimpleDateFormat(pattern, Locale.getDefault()).format(System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
哪里pattern可能是:
完整参考:
http://developer.android.com/reference/java/text/SimpleDateFormat.html
这就是 Google 建议获取 TimezoneOffset 的方式。
Calendar calendar = Calendar.getInstance(Locale.getDefault());
int offset = -(calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)
Run Code Online (Sandbox Code Playgroud)
https://developer.android.com/reference/java/util/Date#getTimezoneOffset()
小智 7
public static 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 = (offsetInMillis >= 0 ? "+" : "-") + offset;
return offset;
}
Run Code Online (Sandbox Code Playgroud)
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 = (offsetInMillis >= 0 ? "+" : "-") + offset;
Run Code Online (Sandbox Code Playgroud)
小智 5
获得时区偏移的另一种解决方案:
TimeZone tz = TimeZone.getDefault();
String current_Time_Zone = getGmtOffsetString(tz.getRawOffset());
public static String getGmtOffsetString(int offsetMillis) {
int offsetMinutes = offsetMillis / 60000;
char sign = '+';
if (offsetMinutes < 0) {
sign = '-';
offsetMinutes = -offsetMinutes;
}
return String.format("GMT%c%02d:%02d", sign, offsetMinutes/60, offsetMinutes % 60);
}
Run Code Online (Sandbox Code Playgroud)
TimeZone timeZone = TimeZone.getDefault();
String timeZoneInGMTFormat = timeZone.getDisplayName(false,TimeZone.SHORT);
Run Code Online (Sandbox Code Playgroud)
输出:GMT+5:30
一般来说,您无法从亚洲/加尔各答等时区转换为 GMT 偏移量(如 +05:30 或 +07:00)。时区,顾名思义,是地球上的一个地方,由该地方的人们使用的历史的、现在的和已知的未来的 UTC 偏移量组成(目前我们可以将 GMT 和 UTC 视为同义词,严格来说它们不是) 。例如,自 1945 年以来,亚洲/加尔各答的偏移量一直为 +05:30。在 1941 年至 1945 年期间,偏移量为 +06:30,在此之前的偏移量为 +05:53:20(是的,精确到秒)。许多其他时区都有夏令时(夏令时,DST),并且每年更改两次偏移量。
\n\n不过,给定一个时间点,我们可以针对该特定时间点进行翻译。我想提供一种现代的方法来做到这一点。
\n\n ZoneId zone = ZoneId.of("Asia/Kolkata");\n\n ZoneOffset offsetIn1944 = LocalDateTime.of(1944, Month.JANUARY, 1, 0, 0)\n .atZone(zone)\n .getOffset();\n System.out.println("Offset in 1944: " + offsetIn1944);\n\n ZoneOffset offsetToday = OffsetDateTime.now(zone)\n .getOffset();\n System.out.println("Offset now: " + offsetToday);\nRun Code Online (Sandbox Code Playgroud)\n\n刚才运行时的输出是:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\nOffset in 1944: +06:30\nOffset now: +05:30\n
对于默认时区设置zone为ZoneId.systemDefault()。
要使用文本格式化偏移量,请在模式中GMT使用带有(四个大写字母 O)的格式化程序:OOOO
DateTimeFormatter offsetFormatter = DateTimeFormatter.ofPattern("OOOO");\n System.out.println(offsetFormatter.format(offsetToday));\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n格林威治标准时间+05:30
\n
我推荐并在我的代码中使用 java.time,现代 Java 日期和时间 API。许多其他答案中使用的TimeZone、Calendar、Date和类设计得很糟糕SimpleDateFormat,DateFormat而且现在已经过时了,所以我的建议是避免所有这些。
是的,java.time 在旧版和新版 Android 设备上都能很好地工作。它只需要至少Java 6。
\n\norg.threeten.bp子包中导入日期和时间类。java.time。java.time到 Java 6 和 7(ThreeTen for JSR-310)。| 归档时间: |
|
| 查看次数: |
76784 次 |
| 最近记录: |