我需要一个时区,并且有时区偏移。
例如,我有偏移量= 14400000
。我想要一个时区(任何地方,任何城市)。我可以在SimpleDateFormat
中使用该时区,以便为该时区打印正确的时间。
This is what I found(我重构了一点):
private TimeZone getTimeZone(int offset) {
final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("UTC");
String[] ids = TimeZone.getAvailableIDs(offset);
if (ids == null || ids.length == 0) {
return UTC_TIME_ZONE;
}
String matchingZoneId = ids[0];
return TimeZone.getTimeZone(matchingZoneId);
}
我得到:
sun.util.calendar.ZoneInfo[id="Asia/Baku",offset=14400000,dstSavings=0,useDaylight=false,transitions=68,lastRule=null]
我不喜欢这种方法,因为
TimeZone
将调用此处的ZoneInfoFile
getZoneIds(int var1)
。这是反编译的代码。 public static String[] getZoneIds(int var0) {
ArrayList var1 = new ArrayList();
String[] var2 = getZoneIds();
int var3 = var2.length;
for(int var4 = 0; var4 < var3; ++var4) {
String var5 = var2[var4];
ZoneInfo var6 = getZoneInfo(var5);
if (var6.getRawOffset() == var0) {
var1.add(var5);
}
}
var2 = (String[])var1.toArray(new String[var1.size()]);
Arrays.sort(var2);
return var2;
}
您可以看到,它遍历现有对象以构建一个区域ID数组,而我只需要一个!
我的问题是,有没有更有效的方法?我只需要任何时区ID或给定偏移量的单个时区。
最佳答案
您可以使用SimpleTimeZone为任何偏移量构造一个TimeZone实例:
new SimpleTimeZone(offset, "My TimeZone");
关于java - 通过时区偏移量获取TimeZone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48282034/