java - 通过时区偏移量获取TimeZone

标签 java date datetime timezone timezone-offset

我需要一个时区,并且有时区偏移。

例如,我有偏移量= 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/

相关文章:

java - 使用相同的字符串文字而不是最终变量有什么好处?

java - 在另一个时区格式化本地日期

javascript - 提交表格前重新格式化日期

excel - 有没有办法用 excel 将日期转换为 2008.5(2008 年年中)的正确日期?

c++ - put_time 是否具有转换说明符,该说明符输出月份中没有前导字符的个位数天数

python , Bokeh : How to change range of datetime axis

java.lang.IndexOutOfBoundsException : No group 1 | Pattern matching

java - 如何将可绘制资源中的图像保存到SD卡?

.net - 是否有.NET方式来存储类似于自定义类的时间段?

python - Python 中的 PRTime 到日期时间