用java.time包中的Clock类得出的当前时间不对
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java.time包中的Clock类得出的当前时间不对相关的知识,希望对你有一定的参考价值。
import java.time.*;
public class Timess
public static void main(String[] args)
Clock clock=Clock.systemUTC();
System.out.println("当前时间为:"+clock.instant());
年月日和分都对,就是时不对,运行程序时是下午5点多,为什么呢?
LocalDate mLocalDate=LocalDate.now();
LocalTime specificTime = LocalTime.now();
这两个代表当地时间 你可以看看 参考技术B UTC 又称世界统一时间,世界标准时间,国际协调时间
不属于任意时区
中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8
如果要用中国时间可以使用LocalDateTime这种不带时区的时间 ,也可以使用Calendar.instance().getTime(); 因为Calendar在不指定时区和地点的情况下使用默认的时区和地点,就是你现在看到了咯 参考技术C 用java 写一个clock的类,100毫秒的时钟 求代码...ClockAs() secondTime = new Timer(1000, ...(s.substring(17, 19)); // 获取时间中的秒... 参考技术D 跟你时区的设置有关
Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date
从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转Date。下面是时间类互相转换大全,包含Instant、LocalDate、LocalDateTime、LocalTime和Date的相互转换,下面是一个工具类,仅供参考:
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.temporal.TemporalAccessor; import java.util.Date; import java.util.Objects; /** * * @ClassName: DateTimeConverterUtil * @Description: DateTime Converter * @author xkzhangsan * @date 2019年12月1日 * */ public class DateTimeConverterUtil { public static Date toDate(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } public static Date toDate(LocalDate localDate) { Objects.requireNonNull(localDate, "localDate"); return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); } /** * 以当天的日期+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()); } public static Date toDate(Instant instant) { return Date.from(instant); } public static Date toDate(Long epochMilli){ Objects.requireNonNull(epochMilli, "epochMilli"); return new Date(epochMilli); } public static LocalDateTime toLocalDateTime(Date date) { Objects.requireNonNull(date, "date"); return Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime(); } public static LocalDateTime toLocalDateTime(LocalDate localDate) { Objects.requireNonNull(localDate, "localDate"); return localDate.atStartOfDay(); } /** * 以当天的日期+LocalTime组成新的LocalDateTime * @param localTime * @return */ public static LocalDateTime toLocalDateTime(LocalTime localTime) { Objects.requireNonNull(localTime, "localTime"); return LocalDate.now().atTime(localTime); } public static LocalDateTime toLocalDateTime(Instant instant) { return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); } public static LocalDateTime toLocalDateTime(Long epochMilli) { Objects.requireNonNull(epochMilli, "epochMilli"); return LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()); } public static LocalDateTime toLocalDateTime(TemporalAccessor temporal) { return LocalDateTime.from(temporal); } public static LocalDate toLocalDate(Date date) { return toLocalDateTime(date).toLocalDate(); } public static LocalDate toLocalDate(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalDate(); } public static LocalDate toLocalDate(Instant instant) { return toLocalDateTime(instant).toLocalDate(); } public static LocalDate toLocalDate(TemporalAccessor temporal) { return LocalDate.from(temporal); } public static LocalTime toLocalTime(Date date) { return toLocalDateTime(date).toLocalTime(); } public static LocalTime toLocalTime(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.toLocalTime(); } public static LocalTime toLocalTime(Instant instant) { return toLocalDateTime(instant).toLocalTime(); } public static LocalTime toLocalTime(TemporalAccessor temporal) { return LocalTime.from(temporal); } public static Instant toInstant(Date date) { Objects.requireNonNull(date, "date"); return date.toInstant(); } public static Instant toInstant(LocalDateTime localDateTime) { Objects.requireNonNull(localDateTime, "localDateTime"); return localDateTime.atZone(ZoneId.systemDefault()).toInstant(); } public static Instant toInstant(LocalDate localDate) { return toLocalDateTime(localDate).atZone(ZoneId.systemDefault()).toInstant(); } /** * 以当天的日期+LocalTime组成新的LocalDateTime转换为Instant * @param localTime * @return */ public static Instant toInstant(LocalTime localTime) { return toLocalDateTime(localTime).atZone(ZoneId.systemDefault()).toInstant(); } public static Instant toInstant(Long epochMilli) { Objects.requireNonNull(epochMilli, "epochMilli"); return Instant.ofEpochMilli(epochMilli); } public static Instant toInstant(TemporalAccessor temporal) { return Instant.from(temporal); } /** * 转换为毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param date * @return */ public static Long toEpochMilli(Date date){ Objects.requireNonNull(date, "date"); return date.getTime(); } /** * 转换为毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param localDateTime * @return */ public static Long toEpochMilli(LocalDateTime localDateTime){ return toInstant(localDateTime).toEpochMilli(); } /** * 转换为毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param localDate * @return */ public static Long toEpochMilli(LocalDate localDate){ return toInstant(localDate).toEpochMilli(); } /** * 转换为毫秒值 * 从1970-01-01T00:00:00Z开始的毫秒值 * @param instant * @return */ public static Long toEpochMilli(Instant instant){ Objects.requireNonNull(instant, "instant"); return instant.toEpochMilli(); } }
测试类:
package com.xkzhangsan.time.test; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; 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)); } @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)); } }
输出结果:
===================dateConverterTest===================== 2020-01-05T22:41:56.606 2020-01-05 22:41:56.606 2020-01-05T14:41:56.606Z ===================localTimeConverterTest===================== 22:41:56.706 Sun Jan 05 22:41:56 CST 2020 2020-01-05T22:41:56.706 22:41:56.706 2020-01-05T14:41:56.706Z ===================localDateConverterTest===================== 2020-01-05 Sun Jan 05 00:00:00 CST 2020 2020-01-05T00:00 2020-01-04T16:00:00Z ===================localDateTimeConverterTest===================== 2020-01-05T22:41:56.718 Sun Jan 05 22:41:56 CST 2020 2020-01-05 22:41:56.718 2020-01-05T14:41:56.718Z ===================instantConverterTest===================== 2020-01-05T14:41:56.719Z Sun Jan 05 22:41:56 CST 2020 2020-01-05T22:41:56.719 2020-01-05
git地址:https://github.com/xkzhangsan/xk-time
以上是关于用java.time包中的Clock类得出的当前时间不对的主要内容,如果未能解决你的问题,请参考以下文章
Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate
Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date
Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等
Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。
Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格
Java日期时间API系列32-----Jdk8中java.time包中的新的日期时间API类应用,时间工具包 xk-time 1.0.0 版本完成。