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());
}

你可能感兴趣的:(Java-UTC转换LocalDateTime,DateTimeFormatter, Instant, ZonedDateTime)