Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等
Posted xkzhangsanx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等相关的知识,希望对你有一定的参考价值。
从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转Date。下面是时间类互相转换大全,包含Instant、LocalDate、LocalDateTime、LocalTime、ZonedDateTime和Date的相互转换,时间转换大全,下面是一个工具类,仅供参考:
具体包含:
LocalDateTime转Date,LocalDate转Date,LocalTime转Date,Instant转Date,epochMilli毫秒转Date,ZonedDateTime转Date,Date转LocalDateTime,LocalDate转LocalDateTime,LocalTime转LocalDateTime,Instant转LocalDateTime,epochMilli毫秒转LocalDateTime,temporal转LocalDateTime,ZonedDateTime转LocalDateTime,Date转LocalDate,LocalDateTime转LocalDate,Instant转LocalDate,temporal转LocalDate,ZonedDateTime转LocalDate,Date转LocalTime,LocalDateTime转LocalTime,Instant转LocalTime,temporal转LocalTime,ZonedDateTime转LocalTime,Date转Instant,LocalDateTime转Instant,LocalDate转Instant,LocalTime转Instant,epochMilli毫秒转Instant,temporal转Instant,ZonedDateTime转Instant,Date转毫秒值,LocalDateTime转毫秒值,LocalDate转毫秒值,Instant转毫秒值,ZonedDateTime转毫秒值,Date转ZonedDateTime,LocalDateTime转ZonedDateTime,LocalDate转ZonedDateTime,LocalTime转ZonedDateTime,Instant转ZonedDateTime,epochMilli毫秒转ZonedDateTime,temporal转ZonedDateTime.
package com.xkzhangsan.time.converter; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.temporal.TemporalAccessor; import java.util.Date; import java.util.Objects; /** * 日期转换 * 包含Date、LocalDate、LocalDateTime、LocalTime、Instant和ZonedDateTime的互相转换 * * 注意,ZonedDateTime相关的转换,需要时区一致。 * @ClassName: DateTimeConverterUtil * @Description: DateTime Converter * @author xkzhangsan * @date 2019年12月1日 * */ public class DateTimeConverterUtil { private DateTimeConverterUtil(){ } /** * LocalDateTime转Date * @param localDateTime * @return */ public static Date toDate(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } /** * LocalDate转Date * @param localDate * @return */ public static Date toDate(LocalDate localDate) { Objects.requireNonNull(localDate, "localDate"); return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); } /** * LocalTime转Date * 以当天的日期+LocalTime组成新的LocalDateTime转换为Date * @param localTime * @return */ public static Date toDate(LocalTime localTime) { Objects.requireNonNull(localTime, "localTime"); return Date.from(LocalDate.now().atTime(localTime).atZone(ZoneId.systemDefault()).toInstant()); } /** * Instant转Date * @param instant * @return */ public static Date toDate(Instant instant) { return Date.from(instant); } /** * epochMilli毫秒转Date * @param epochMilli * @return */ public static Date toDate(long epochMilli){ Objects.requireNonNull(epochMilli, "epochMilli"); return new Date(epochMilli); } /** * ZonedDateTime转Date * 注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * @param zonedDateTime * @return */ public static Date toDate(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return Date.from(zonedDateTime.toInstant()); } /** * Date转LocalDateTime * @param date * @return */ public static LocalDateTime toLocalDateTime(Date date) { Objects.requireNonNull(date, "date"); return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); } /** * LocalDate转LocalDateTime * @param localDate * @return */ public static LocalDateTime toLocalDateTime(LocalDate localDate) { Objects.requireNonNull(localDate, "localDate"); return localDate.atStartOfDay(); } /** * LocalTime转LocalDateTime * 以当天的日期+LocalTime组成新的LocalDateTime * @param localTime * @return */ public static LocalDateTime toLocalDateTime(LocalTime localTime) { Objects.requireNonNull(localTime, "localTime"); return LocalDate.now().atTime(localTime); } /** * Instant转LocalDateTime * @param instant * @return */ public static LocalDateTime toLocalDateTime(Instant instant) { return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); } /** * epochMilli毫秒转LocalDateTime * @param epochMilli * @return */ public static LocalDateTime toLocalDateTime(long epochMilli) { Objects.requireNonNull(epochMilli, "epochMilli"); return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()); } /** * temporal转LocalDateTime * @param temporal * @return */ public static LocalDateTime toLocalDateTime(TemporalAccessor temporal) { return LocalDateTime.from(temporal); } /** * ZonedDateTime转LocalDateTime * 注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * @param zonedDateTime * @return */ public static LocalDateTime toLocalDateTime(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.toLocalDateTime(); } /** * Date转LocalDate * @param date * @return */ public static LocalDate toLocalDate(Date date) { return toLocalDateTime(date).toLocalDate(); } /** * LocalDateTime转LocalDate * @param localDateTime * @return */ public static LocalDate toLocalDate(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalDate(); } /** * Instant转LocalDate * @param instant * @return */ public static LocalDate toLocalDate(Instant instant) { return toLocalDateTime(instant).toLocalDate(); } /** * temporal转LocalDate * @param temporal * @return */ public static LocalDate toLocalDate(TemporalAccessor temporal) { return LocalDate.from(temporal); } /** * ZonedDateTime转LocalDate * 注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * @param zonedDateTime * @return */ public static LocalDate toLocalDate(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.toLocalDate(); } /** * Date转LocalTime * @param date * @return */ public static LocalTime toLocalTime(Date date) { return toLocalDateTime(date).toLocalTime(); } /** * LocalDateTime转LocalTime * @param localDateTime * @return */ public static LocalTime toLocalTime(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalTime(); } /** * Instant转LocalTime * @param instant * @return */ public static LocalTime toLocalTime(Instant instant) { return toLocalDateTime(instant).toLocalTime(); } /** * temporal转LocalTime * @param temporal * @return */ public static LocalTime toLocalTime(TemporalAccessor temporal) { return LocalTime.from(temporal); } /** * ZonedDateTime转LocalTime * 注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * @param zonedDateTime * @return */ public static LocalTime toLocalTime(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.toLocalTime(); } /** * Date转Instant * @param date * @return */ public static Instant toInstant(Date date) { Objects.requireNonNull(date, "date"); return date.toInstant(); } /** * LocalDateTime转Instant * @param localDateTime * @return */ public static Instant toInstant(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.atZone(ZoneId.systemDefault()).toInstant(); } /** * LocalDate转Instant * @param localDate * @return */ public static Instant toInstant(LocalDate localDate) { return toLocalDateTime(localDate).atZone(ZoneId.systemDefault()).toInstant(); } /** * LocalTime转Instant * 以当天的日期+LocalTime组成新的LocalDateTime转换为Instant * @param localTime * @return */ public static Instant toInstant(LocalTime localTime) { return toLocalDateTime(localTime).atZone(ZoneId.systemDefault()).toInstant(); } /** * epochMilli毫秒转Instant * @param epochMilli * @return */ public static Instant toInstant(long epochMilli) { Objects.requireNonNull(epochMilli, "epochMilli"); return Instant.ofEpochMilli(epochMilli); } /** * temporal转Instant * @param temporal * @return */ public static Instant toInstant(TemporalAccessor temporal) { return Instant.from(temporal); } /** * ZonedDateTime转Instant * 注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * @param zonedDateTime * @return */ public static Instant toInstant(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.toInstant(); } /** * Date转毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param date * @return */ public static long toEpochMilli(Date date){ Objects.requireNonNull(date, "date"); return date.getTime(); } /** * LocalDateTime转毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param localDateTime * @return */ public static long toEpochMilli(LocalDateTime localDateTime){ return toInstant(localDateTime).toEpochMilli(); } /** * LocalDate转毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param localDate * @return */ public static long toEpochMilli(LocalDate localDate){ return toInstant(localDate).toEpochMilli(); } /** * Instant转毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param instant * @return */ public static long toEpochMilli(Instant instant){ Objects.requireNonNull(instant, "instant"); return instant.toEpochMilli(); } /** * ZonedDateTime转毫秒值,注意,zonedDateTime时区必须和当前系统时区一致,不然会出现问题 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param zonedDateTime * @return */ public static long toEpochMilli(ZonedDateTime zonedDateTime) { Objects.requireNonNull(zonedDateTime, "zonedDateTime"); return zonedDateTime.toInstant().toEpochMilli(); } /** * Date转ZonedDateTime,时区为系统默认时区 * @param date * @return */ public static ZonedDateTime toZonedDateTime(Date date) { Objects.requireNonNull(date, "date"); return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime() .atZone(ZoneId.systemDefault()); } /** * LocalDateTime转ZonedDateTime,时区为系统默认时区 * @param localDateTime * @return */ public static ZonedDateTime toZonedDateTime(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.atZone(ZoneId.systemDefault()); } /** * LocalDate转ZonedDateTime,时区为系统默认时区 * @param localDate * @return such as 2020-02-19T00:00+08:00[Asia/Shanghai] */ public static ZonedDateTime toZonedDateTime(LocalDate localDate) { Objects.requireNonNull(localDate, "localDate"); return localDate.atStartOfDay().atZone(ZoneId.systemDefault()); } /** * LocalTime转ZonedDateTime * 以当天的日期+LocalTime组成新的ZonedDateTime,时区为系统默认时区 * @param localTime * @return */ public static ZonedDateTime toZonedDateTime(LocalTime localTime) { Objects.requireNonNull(localTime, "localTime"); return LocalDate.now().atTime(localTime).atZone(ZoneId.systemDefault()); } /** * Instant转ZonedDateTime,时区为系统默认时区 * @param instant * @return */ public static ZonedDateTime toZonedDateTime(Instant instant) { return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).atZone(ZoneId.systemDefault()); } /** * epochMilli毫秒转ZonedDateTime,时区为系统默认时区 * @param epochMilli * @return */ public static ZonedDateTime toZonedDateTime(long epochMilli) { Objects.requireNonNull(epochMilli, "epochMilli"); return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()) .atZone(ZoneId.systemDefault()); } /** * temporal转ZonedDateTime,时区为系统默认时区 * @param temporal * @return */ public static ZonedDateTime toZonedDateTime(TemporalAccessor temporal) { return LocalDateTime.from(temporal).atZone(ZoneId.systemDefault()); } }
测试代码
package com.xkzhangsan.time.test; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZonedDateTime; import java.util.Date; import org.junit.Test; import com.xkzhangsan.time.converter.DateTimeConverterUtil; public class ConverterTest { @Test public void dateConverterTest(){ System.out.println("===================dateConverterTest====================="); Date date = new Date(); System.out.println(DateTimeConverterUtil.toLocalDateTime(date)); System.out.println(DateTimeConverterUtil.toLocalDate(date)); System.out.println(DateTimeConverterUtil.toLocalTime(date)); System.out.println(DateTimeConverterUtil.toInstant(date)); } @Test public void localDateTimeConverterTest(){ System.out.println("===================localDateTimeConverterTest====================="); LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); System.out.println(DateTimeConverterUtil.toDate(ldt)); System.out.println(DateTimeConverterUtil.toLocalDate(ldt)); System.out.println(DateTimeConverterUtil.toLocalTime(ldt)); System.out.println(DateTimeConverterUtil.toInstant(ldt)); System.out.println(DateTimeConverterUtil.toZonedDateTime(ldt)); } @Test public void localDateConverterTest(){ System.out.println("===================localDateConverterTest====================="); LocalDate ld = LocalDate.now(); System.out.println(ld); System.out.println(DateTimeConverterUtil.toDate(ld)); System.out.println(DateTimeConverterUtil.toLocalDateTime(ld)); System.out.println(DateTimeConverterUtil.toInstant(ld)); } @Test public void localTimeConverterTest(){ System.out.println("===================localTimeConverterTest====================="); LocalTime lt = LocalTime.now(); System.out.println(lt); System.out.println(DateTimeConverterUtil.toDate(lt)); System.out.println(DateTimeConverterUtil.toLocalDateTime(lt)); System.out.println(DateTimeConverterUtil.toLocalTime(lt)); System.out.println(DateTimeConverterUtil.toInstant(lt)); } @Test public void instantConverterTest(){ System.out.println("===================instantConverterTest====================="); Instant instant = Instant.now(); System.out.println(instant); System.out.println(DateTimeConverterUtil.toDate(instant)); System.out.println(DateTimeConverterUtil.toLocalDateTime(instant)); System.out.println(DateTimeConverterUtil.toLocalDate(instant)); } @Test public void zonedDateTimeConverterTest(){ System.out.println("===================zonedDateTimeConverterTest====================="); System.out.println("===================ToOther====================="); ZonedDateTime zonedDateTime = ZonedDateTime.now(); System.out.println(zonedDateTime); System.out.println(DateTimeConverterUtil.toDate(zonedDateTime)); System.out.println(DateTimeConverterUtil.toLocalDateTime(zonedDateTime)); System.out.println(DateTimeConverterUtil.toLocalDate(zonedDateTime)); System.out.println(DateTimeConverterUtil.toLocalTime(zonedDateTime)); System.out.println(DateTimeConverterUtil.toInstant(zonedDateTime)); System.out.println("===================toZonedDateTime====================="); System.out.println(zonedDateTime); System.out.println(DateTimeConverterUtil.toZonedDateTime(new Date())); System.out.println(DateTimeConverterUtil.toZonedDateTime(LocalDateTime.now())); System.out.println(DateTimeConverterUtil.toZonedDateTime(LocalDate.now())); System.out.println(DateTimeConverterUtil.toZonedDateTime(LocalTime.now())); System.out.println(DateTimeConverterUtil.toZonedDateTime(Instant.now())); } }
输出:
===================dateConverterTest===================== 2020-02-19T16:10:04.366 2020-02-19 16:10:04.366 2020-02-19T08:10:04.366Z ===================localTimeConverterTest===================== 16:10:04.458 Wed Feb 19 16:10:04 CST 2020 2020-02-19T16:10:04.458 16:10:04.458 2020-02-19T08:10:04.458Z ===================localDateConverterTest===================== 2020-02-19 Wed Feb 19 00:00:00 CST 2020 2020-02-19T00:00 2020-02-18T16:00:00Z ===================zonedDateTimeConverterTest===================== ===================ToOther===================== 2020-02-19T16:10:04.464+08:00[Asia/Shanghai] Wed Feb 19 16:10:04 CST 2020 2020-02-19T16:10:04.464 2020-02-19 16:10:04.464 2020-02-19T08:10:04.464Z ===================toZonedDateTime===================== 2020-02-19T16:10:04.464+08:00[Asia/Shanghai] 2020-02-19T16:10:04.465+08:00[Asia/Shanghai] 2020-02-19T16:10:04.465+08:00[Asia/Shanghai] 2020-02-19T00:00+08:00[Asia/Shanghai] 2020-02-19T16:10:04.466+08:00[Asia/Shanghai] 2020-02-19T16:10:04.466+08:00[Asia/Shanghai] ===================localDateTimeConverterTest===================== 2020-02-19T16:10:04.466 Wed Feb 19 16:10:04 CST 2020 2020-02-19 16:10:04.466 2020-02-19T08:10:04.466Z 2020-02-19T16:10:04.466+08:00[Asia/Shanghai] ===================instantConverterTest===================== 2020-02-19T08:10:04.467Z Wed Feb 19 16:10:04 CST 2020 2020-02-19T16:10:04.467 2020-02-19
源码地址:https://github.com/xkzhangsan/xk-time
以上是关于Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等的主要内容,如果未能解决你的问题,请参考以下文章
Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
Java日期时间API系列20-----Jdk8中java.time包中的新的日期时间API类,ZoneId时区ID大全等。
Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点
Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter
Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。