JDK8的时间处理
程序员文章站
2022-07-12 14:49:42
...
本文转载自:https://mp.weixin.qq.com/s/bbuItfxLgemJRuFb6iqWzA
当前时间:2019年12月27日。距离 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 的新特性你真的用起来了吗?我准备写一个 Jdk 8开始的新特性介绍以及使用的系列文章,后续 Jdk 也会继续更新,你如果需要的话不妨关注下博客或者公众号。
1. 时间处理类
Jdk8 带来了全新的时间处理工具类,用于代替之前存在缺陷的时间处理。新的时间处理相比之前更加简单好用。
Jdk8 时间处理类
常用的类有以下几个类。
时间相关类 | 介绍 |
---|---|
LocalDateTime | 时间处理类,最高精确到纳秒 |
LocalDate | 时间处理类,最高精确到天 |
DateTimeFormatter | 时间格式化 |
ZoneId | 时区设置类 |
2. 时间获取
使用不同的类可以获取不同精度的时间。
/**
* 时间获取
*/
@Test
public 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-12-27T09:57:20.928
当前精确时间:2019-12-27 9-57-20
当前日期:2019-12-27
当前日期:2019-12-27
当天时间:09:57:20.929
当天时间:9:57:20
当前精确时间(有时区):2019-12-27T09:57:20.929+08:00[Asia/Shanghai]
当前精确时间(有时区):2019-12-27 9-57-20
3. 时间创建
可以指定年月日时分秒创建一个时间类,也可以使用字符串直接转换成时间。
/**
* 时间创建
*/
@Test
public 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);eD);
}
创建的时间:
当前精确时间:2019-12-20T10:04:08
当前日期:2019-12-20
当天时间:12:01:01
4. 时间转换
/**
* 日期转换
*/
@Test
public void convertTimeTest() {
LocalDateTime parseTime = LocalDateTime.parse("2019-12-27T10:06:22.222");
System.out.println("字符串时间转换:" + parseTime);
LocalDate formatted = LocalDate.parse("20191227", 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-12-27T10:06:22.222
字符串时间转换-指定格式:2019-12-27
Date 转换成 LocalDateTime:2019-12-27T10:06:52.855
LocalDateTime 转换成 Date:Fri Dec 27 10:06:52 CST 2019
当前时间转时间戳:1577412412866
时间戳转换成时间:2019-12-27T10:06:52.866
5. 时间格式化
/**
* 日期格式化
*/
@Test
public 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-12-27T10:08:40.152
格式化后:2019-12-27T10:08:40.152
格式化后:2019-12-27
格式化后:10:08:40.152
格式化后:2019-12-27 10:08:40
6. 时间比较
/**
* 时间比较
*/
@Test
public 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-12-27T10:09:51.428在2019-12-26T10:09:51.428之后吗?true
2019-12-27T10:09:51.428在2019-12-26T10:09:51.428之前吗?false
相差月份0
相差天数1
相差小时24
相差分钟1440
距离JDK 14 发布还有:81天
7. 时间加减
/**
* 日期加减
*/
@Test
public 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-12-27T10:12:18.933
增加1月1天1小时1分钟1秒时间后:2020-01-28T11:13:19.933
减少2个月时间后:2019-10-27T10:12:18.933
8. 时间扩展方法
/**
* 时间方法
*/
@Test
public 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-12-27T10:13:35.418
本月第一天:2019-12-01T10:13:35.418
当天最后一秒:2019-12-27T23:59:59.418
本月最后一天:2019-12-31T10:13:35.418
今年是否闰年:false
Jdk 8 新的时间类使用起来相比之前显得更加方便简单。
JDK8 之前时间处理
Jdk 8 也把时间处理成独立成一个包,并且使用不同的类名加以区分。而不是像之前相同的类名不同的包。这样的方式使用起来也更加清晰。
本文转载自:https://mp.weixin.qq.com/s/bbuItfxLgemJRuFb6iqWzA
如有侵权请联系本人进行删除
推荐阅读
-
photoshop将照片处理成黑白风格的效果全过程(图文)
-
JS匹配日期和时间的正则表达式示例
-
一个经典实用的PHP图像处理类分享
-
Intel:10nm的Ice Lake处理器相比前代有18% IPC提升
-
Flutter使用JsBridge方式处理Webview与H5通信的方法
-
ATX 2.52如何撑起你的12核处理器 该不该换呢?
-
Intel退役Kaby Lake-G处理器 A/I合体的杰作消失了
-
由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
-
IE在spa应用下内存泄露的处理教程
-
做了电商这样长时间,才知道PPC广告这样玩的,你懂了吗?