Java中Date类型和UTC时间的相互转换

关于UTC之前有了一篇文章,最近处理了些时间相关的业务,所以本文记录下一些常用的转换方式

References:

关于UTC和Date什么的就不说了,这里直接贴几个常用的转换方法:

  • UTC格式时间转java.util.Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date strDate;
try {
    strDate = sdf.parse(item.getDate());
} catch (Exception e) {
    strDate = null;
}

这里需要注意的就是T这个字符的转义,由于T是个特殊的字符,所以不能像普通字符那样写在pattern里,也不能用\转义,都会导致无法解析,这里需要用两个英文单引号

  • java.util.Date转UTC格式时间

由于Date不保存时区信息,记录的是1970至今的毫秒数,所以直接调用Date.toString()方法获得的就是UTC时间(GMT)。需要格式化展示的可以用如下方法:

public static String toISO8601UTC(Date date) {
    TimeZone tz = TimeZone.getTimeZone("UTC");
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
    df.setTimeZone(tz);
    return df.format(date);
}

\>\> update20210207 Java8中的时间处理用DateTimeFormatter更方便

/**
 * 返回指定偏移量的ISO格式时间字符串:
 * 2021-01-25T15:11:56.778+08:00
 * @param seconds 当前时间增加秒数
 * @return 偏移后时间的字符串
 */
public static String getOffsetISOTime(long seconds) {
    OffsetDateTime offsetDateTime = OffsetDateTime.now().plusSeconds(seconds);
    return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(offsetDateTime);
}

/**
 * 返回当前时间ISO格式字符串:
 * 2021-01-25T15:11:56.778+08:00
 * @return 当前时间的字符串
 */
public static String getCurrentISOTime() {
    ZonedDateTime now = ZonedDateTime.now();
    return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(now);
}

DateTimeFormatter的一些格式如下

ZonedDateTime now = ZonedDateTime.now();
DateTimeFormatter.ISO_DATE_TIME.format(now);        // 2021-02-07T14:05:24.847499+08:00[Asia/Shanghai]
DateTimeFormatter.ISO_ZONED_DATE_TIME.format(now);  // 2021-02-07T14:05:24.847499+08:00[Asia/Shanghai]
DateTimeFormatter.BASIC_ISO_DATE.format(now);       // 20210207+0800
DateTimeFormatter.ISO_INSTANT.format(now);          // 2021-02-07T06:05:24.847499Z
DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(now);  // 2021-02-07T14:05:24.847499
DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(now); // 2021-02-07T14:05:44.8464995+08:00
DateTimeFormatter.RFC_1123_DATE_TIME.format(now);   // Sun, 7 Feb 2021 14:05:24 +0800

标签: none

添加新评论

ali-01.gifali-58.gifali-09.gifali-23.gifali-04.gifali-46.gifali-57.gifali-22.gifali-38.gifali-13.gifali-10.gifali-34.gifali-06.gifali-37.gifali-42.gifali-35.gifali-12.gifali-30.gifali-16.gifali-54.gifali-55.gifali-59.gif

加载中……