【问题标题】:Convert timestamp to a specified timezone offset将时间戳转换为指定的时区偏移量
【发布时间】:2021-07-06 09:43:06
【问题描述】:

如何转换长时间戳,例如2556072000000L,指定时区偏移量中的字符串,例如+08:30?我研究了 Joda 方法,但没有找到解决方案。 同样,如何转换字符串时间戳,例如2050-12-31T04:00:00Z,到指定时区偏移量的字符串,例如+08:30? 2050-12-31T12:30:00+08:30 在指定的偏移量中是预期的。

+08:30 解析为三个部分:+、小时偏移量 (8) 和分钟偏移量 (30),将偏移量添加到 timestampdateTime 可能是一个解决方案。但是,我想知道是否已经有一个解决方案,这样我就不需要重新发明轮子了?

/*
 * timestamp: 2556072000000L (2050-12-31T04:00:00Z)
 * offset: +08:30
 * return: 2050-12-31T12:30:00+08:30
 */
String toOffset(long timestamp, String offset);

/*
 * dateTime: 2050-12-31T04:00:00Z
 * offset: +08:30
 * return: 2050-12-31T12:30:00+08:30
 */
String toOffset(String dateTime, String offset);

【问题讨论】:

    标签: timezone offset


    【解决方案1】:

    阅读此article,我得到了问题的答案。这里是:

    import java.time.ZoneOffset;
    
    /*
     * timestamp: 2556072000000L (2050-12-31T04:00:00Z)
     * offset: +08:30
     * return: 2050-12-31T12:30:00+08:30
     */
    public String toOffset(long timestamp, String offset); { // +08:30
            DateTime time = new DateTime(timestamp + getOffsetMillis(offset));
            time = time.withZone(DateTimeZone.forID(DateTimeZone.UTC.getID())); // 2050-12-31T12:30:00Z
            DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
            String dateStr = time.toString(formatter);  // 2050-12-31T12:30:00
            return dateStr + offset; // 2050-12-31T12:30:00+08:30
    }
    
    public long getOffsetMillis(String offset) { // +08:30
        ZoneOffset zoneOffSet = ZoneOffset.of(offset);
        return zoneOffSet.getTotalSeconds() * 1000; // (8 * 60 * 60 + 30 * 60) * 1000
    }
    

    请注意,时区偏移量必须在 [-18:00, +18:00] 的范围内。以下引自JDK document

    2008 年,世界各地的时区偏移从 -12:00 延长到 +14:00。为了防止扩展该范围出现任何问题,但仍提供验证,偏移范围限制为 -18:00 至 18:00(含)。

    如果您查看 Joda 时区 table,您会发现所有时区的偏移量都在 [-12:00, +14:00] 范围内。

    【讨论】:

      猜你喜欢
      • 2013-07-31
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2021-06-29
      • 1970-01-01
      • 2016-10-23
      • 2012-08-30
      相关资源
      最近更新 更多