龙空技术网

Jdk14 都要出了,Jdk8 的时间处理姿势还不了解一下?

老男孩的成长之路 1334

前言:

此刻姐妹们对“jdk18获取当前时间”大体比较看重,各位老铁们都需要剖析一些“jdk18获取当前时间”的相关文章。那么小编在网摘上收集了一些关于“jdk18获取当前时间””的相关资讯,希望兄弟们能喜欢,咱们快快来学习一下吧!

当前时间:2019年10月25日。距离 JDK 14 发布时间(2020年3月17日)还有多少天?

// 距离JDK 14 发布还有多少天?LocalDate jdk14 = LocalDate.of(2020, 3, 17);LocalDate nowDate = LocalDate.now();System.out.println("距离JDK 14 发布还有:"+nowDate.until(jdk14,ChronoUnit.DAYS)+"天");

JDK 8 已经在 2014年 3月 18日正式可用 ,距离现在已经 5年多时间过去了。5年时间里很多企业也都换上了 JDK 8,明年 3月份 Jdk14 也要来了,那么 Jdk 8 的新特性你真的用起来了吗?

1. 时间处理类

Jdk8 带来了全新的时间处理工具类,用于代替之前存在缺陷的时间处理。新的时间处理相比之前更加简单好用。

常用的类有以下几个类。

时间相关类介绍LocalDateTime时间处理类,最高精确到纳秒LocalDate时间处理类,最高精确到天DateTimeFormatter时间格式化ZoneId时区设置类

2. 时间获取

使用不同的类可以获取不同精度的时间。

/** * 时间获取*/@Testpublic void nowTimeTest() { // 当前精确时间 LocalDateTime now = LocalDateTime.now(); System.out.println("当前精确时间:" + now); System.out.println("当前精确时间:" + now.getYear() + "-" + now.getMonthValue() + "-" + now.getDayOfMonth() + " " + now.getHour() + "-" + now.getMinute() + "-" + now.getSecond()); // 获取当前日期 LocalDate localDate = LocalDate.now(); System.out.println("当前日期:" + localDate); System.out.println("当前日期:" + localDate.getYear() + "-" + localDate.getMonthValue() + "-" + localDate.getDayOfMonth()); // 获取当天时间 LocalTime localTime = LocalTime.now(); System.out.println("当天时间:" + localTime); System.out.println("当天时间:" + localTime.getHour() + ":" + localTime.getMinute() + ":" + localTime.getSecond()); // 有时区的当前精确时间 ZonedDateTime nowZone = LocalDateTime.now().atZone(ZoneId.systemDefault()); System.out.println("当前精确时间(有时区):" + nowZone); System.out.println("当前精确时间(有时区):" + nowZone.getYear() + "-" + nowZone.getMonthValue() + "-" + nowZone.getDayOfMonth() + " " + nowZone.getHour() + "-" + nowZone.getMinute() + "-" + nowZone.getSecond());} 

获取到的时间:

当前精确时间:2019-10-24T00:26:41.724当前精确时间:2019-10-24 0-26-41当前日期:2019-10-24当前日期:2019-10-24当前精确时间(有时区):2019-10-24T00:26:41.725+08:00[GMT+08:00]当前精确时间(有时区):2019-10-24 0-26-41当天时间:00:26:41.725当天时间:0:26:41
3. 时间创建

可以指定年月日时分秒创建一个时间类,也可以使用字符串直接转换成时间。

/** * 时间创建 */@Testpublic void createTime() { LocalDateTime ofTime = LocalDateTime.of(2019, 10, 1, 8, 8, 8); System.out.println("当前精确时间:" + ofTime); LocalDate localDate = LocalDate.of(2019, 10, 01); System.out.println("当前日期:" + localDate); LocalTime localTime = LocalTime.of(12, 01, 01); System.out.println("当天时间:" + localTime);}

创建的时间:

当前精确时间:2019-10-01T08:08:08当前日期:2019-10-01当天时间:12:01:01
4. 时间转换
/*** 日期转换*/@Testpublic void convertTimeTest() { LocalDateTime parseTime = LocalDateTime.parse("2019-10-01T22:22:22.222"); System.out.println("字符串时间转换:" + parseTime); LocalDate formatted = LocalDate.parse("20190101", DateTimeFormatter.BASIC_ISO_DATE); System.out.println("字符串时间转换-指定格式:" + formatted); // Date 转换成 LocalDateTime Date date = new Date(); ZoneId zoneId = ZoneId.systemDefault(); System.out.println("Date 转换成 LocalDateTime:" + LocalDateTime.ofInstant(date.toInstant(), zoneId)); // LocalDateTime 转换成 Date LocalDateTime localDateTime = LocalDateTime.now(); Date toDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); System.out.println("LocalDateTime 转换成 Date:" + toDate);\ // 当前时间转时间戳 long epochMilli = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli(); System.out.println("当前时间转时间戳:" + epochMilli); // 时间戳转换成时间 LocalDateTime epochMilliTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault()); System.out.println("时间戳转换成时间:" + epochMilliTime);}

转换结果:

字符串时间转换:2019-10-01T22:22:22.222字符串时间转换-指定格式:2019-01-01Date 转换成 LocalDateTime:2019-10-24T00:46:41.251LocalDateTime 转换成 Date:Thu Oct 24 00:46:41 GMT+08:00 2019当前时间转时间戳:1571849201258时间戳转换成时间:2019-10-24T00:46:41.258
5. 时间格式化
/** * 日期格式化 */@Testpublic void formatTest() { LocalDateTime now = LocalDateTime.now(); System.out.println("当前时间:" + now); System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_DATE)); System.out.println("格式化后:" + now.format(DateTimeFormatter.ISO_LOCAL_TIME)); System.out.println("格式化后:" + now.format(DateTimeFormatter.ofPattern("YYYY-MM-dd hh:mm:ss")));}

格式化后:

当前时间:2019-10-24T00:37:44.867格式化后:2019-10-24T00:37:44.867格式化后:2019-10-24格式化后:00:37:44.867格式化后:2019-10-24 12:37:44
6. 时间比较
/** * 时间比较 */@Testpublic void diffTest() { LocalDateTime now = LocalDateTime.now(); LocalDateTime yestory = now.minusDays(1); System.out.println(now + "在" + yestory + "之后吗?" + now.isAfter(yestory)); System.out.println(now + "在" + yestory + "之前吗?" + now.isBefore(yestory)); // 时间差 long day = yestory.until(now, ChronoUnit.DAYS); long month = yestory.until(now, ChronoUnit.MONTHS); long hours = yestory.until(now, ChronoUnit.HOURS); long minutes = yestory.until(now, ChronoUnit.MINUTES); System.out.println("相差月份" + month); System.out.println("相差天数" + day); System.out.println("相差小时" + hours); System.out.println("相差分钟" + minutes); // 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate.of(2020, 3, 17); LocalDate nowDate = LocalDate.now(); System.out.println("距离JDK 14 发布还有:" + nowDate.until(jdk14, ChronoUnit.DAYS) + "天");}

比较结果:

2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之后吗?true2019-10-24T00:39:01.589在2019-10-23T00:39:01.589之前吗?false相差月份0相差天数1相差小时24相差分钟1440距离JDK 14 发布还有:145天
7. 时间加减
/** * 日期加减 */@Testpublic void calcTest() { LocalDateTime now = LocalDateTime.now(); System.out.println("当前时间:"+now); LocalDateTime plusTime = now.plusMonths(1).plusDays(1).plusHours(1).plusMinutes(1).plusSeconds(1); System.out.println("增加1月1天1小时1分钟1秒时间后:" + plusTime); LocalDateTime minusTime = now.minusMonths(2); System.out.println("减少2个月时间后:" + minusTime);}

操作结果:

当前时间:2019-10-24T00:41:08.877增加1月1天1小时1分钟1秒时间后:2019-11-25T01:42:09.877减少2个月时间后:2019-08-24T00:41:08.877 
8. 时间扩展方法
/** * 时间方法 */@Testpublic void timeFunctionTest() { LocalDateTime now = LocalDateTime.now(); System.out.println("当前时间:" + now); // 第一天 LocalDateTime firstDay = now.withDayOfMonth(1); System.out.println("本月第一天:" + firstDay); // 当天最后一秒 LocalDateTime lastSecondOfDay = now.withHour(23).withMinute(59).withSecond(59); System.out.println("当天最后一秒:" + lastSecondOfDay); // 最后一天 LocalDateTime lastDay = now.with(TemporalAdjusters.lastDayOfMonth()); System.out.println("本月最后一天:" + lastDay); // 是否闰年 System.out.println("今年是否闰年:" + Year.isLeap(now.getYear()));}

输出结果:

当前时间:2019-10-24T00:43:28.296本月第一天:2019-10-01T00:43:28.296当天最后一秒:2019-10-24T23:59:59.296本月最后一天:2019-10-31T00:43:28.296今年是否闰年:false

Jdk 8 新的时间类使用起来相比之前显得更加方便简单。

Jdk 8 也把时间处理成独立成一个包,并且使用不同的类名加以区分。而不是像之前相同的类名不同的包。这样的方式使用起来也更加清晰。

标签: #jdk18获取当前时间