当点击按钮时,我想从 Android 手机中获取时区。
当点击按钮时,我想从 Android 手机中获取时区。
您是否尝试使用 TimeZone.getDefault()
:
大多数应用程序将使用 TimeZone.getDefault(),它返回基于程序运行所在时区的 TimeZone。
参考: http://developer.android.com/reference/java/util/TimeZone.html
DateTimeZone.forTimeZone(TimeZone.getDefault());
- Joshua PinterTimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezone id :: " +tz.getID());
输出:
时区 GMT+09:30,时区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()
是获得这个的正确方法。 - anonymous现代方法:
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
当2011年提出这个问题时,大多数其他答案中使用的TimeZone
类是我们拥有的,尽管它设计得很差。如今它已经过时了,我建议我们使用java.time,即2014年推出的现代Java日期和时间API。
java.time在旧版和新版Android设备上都能正常工作。它只需要至少Java 6。
coreLibraryDesugaring
,就可以直接使用java.time。不再需要ThreeTenABP。(原来的项目:使用ThreeTen Backport的Android版,称为ThreeTenABP。确保从org.threeten.bp
导入日期和时间类及其子包。)java.time
。java.time
后移到Java 6和7中(JSR-310的ThreeTen)。coreLibraryDesugaring
,您可以直接使用 java.time。 - JonikTimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
它将打印为
Asia/Kolkata
在我的设备上,TimeZone.getDefault()
总是返回UTC时区。
我需要这样做来获取用户配置的时区:
TimeZone.setDefault(null)
val tz = TimeZone.getDefault()
此函数将返回用户选择的时区。
TimeZone.getDefault()
总是返回 UTC。感谢提供解决方案。 - Lybrica使用简单的日期格式化解决方案: 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 " );
==> Output is : +05:30