添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
精彩文章免费看

Java-UTC转换LocalDateTime,DateTimeFormatter, Instant, ZonedDateTime

参考

  • Instant
  • DateTimeFormatter
  • ZonedDateTime
  • LocalDateTime
  • UTC字符串转Instant

    public class CommonDateUtil {
         * UTC转Instant
         * @param utc, 例如:"2019-04-24T11:00:00.000Z"
         * @return
        public static Instant convert2(String utc) {
            if (StringUtils.isBlank(utc)) {
                return null;
            return Instant.parse(utc);
    public class CommonDateUtilTest {
        @Test
        public void testInstant() {
            String start = "2019-04-24T11:00:00.000Z";
            Instant instant = CommonDateUtil.convert2(start);
            Assert.assertEquals(instant.toString(), "2019-04-24T11:00:00Z");
    

    UTC字符串转ZonedDateTime

    public class CommonDateUtil { public static ZonedDateTime convert(String utc) { if (StringUtils.isBlank(utc)) { return null; Instant instant = Instant.parse(utc); return ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); public class CommonDateUtilTest { @Test public void testZoned() { String start = "2019-04-24T11:00:00.000Z"; ZonedDateTime zonedDateTime = CommonDateUtil.convert(start); Assert.assertEquals(zonedDateTime.toInstant().toString(), startRtn); Assert.assertEquals(zonedDateTime.toString(), "2019-04-24T19:00+08:00[Asia/Shanghai]"); Assert.assertEquals(zonedDateTime.toLocalDateTime().toString(), "2019-04-24T19:00"); Assert.assertEquals(zonedDateTime.getZone().toString(), "Asia/Shanghai"); Assert.assertEquals(zonedDateTime.getOffset().toString(), "+08:00");

    UTC字符串转LocalDateTime

    有两种方案。
    方案一:先转成ZonedDateTime,通过ZonedDateTime.toLocalDateTime()得到LocalDateTime。具体实现参照UTC字符串转ZonedDateTime。
    方案二:先转成Instant,通过LocalDateTime.ofInstant(Instant instant, ZoneId zone)得到LocalDateTime。

    public static LocalDateTime convertLocalDateTime(String utc) {
            if (StringUtils.isBlank(utc)) {
                return null;
            Instant instant = Instant.parse(utc);
            //转成上海时区时间。
            return LocalDateTime.ofInstant(instant, TimeZone.getTimeZone("Asia/Shangha").toZoneId());
            //转成系统默认时区的时间
            //return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());