网站首页 > java教程 正文
作者:陶清清 来源:https://www.jianshu.com/p/2949db9c3df5
在Java 8以前,日期和时间处理一直被广大java程序员抱怨太难用,首先是java.util和java.sql中,都包含Date类,如果要进行时间格式化,还需要java.text.DateFormat类处理。同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第三方日期库joda很多的优点。
在java8中,java.time包下主要包含下面几个主要的类:
Instant:时间戳 Duration:持续时间,时间差 LocalDate:只包含日期,比如:2016-10-20 LocalTime:只包含时间,比如:23:12:10 LocalDateTime:包含日期和时间,比如:2016-10-20 23:14:21 Period:时间段 ZoneOffset:时区偏移量,比如:+8:00 ZonedDateTime:带时区的时间 Clock:时钟,比如获取目前美国纽约的时间
以及java.time.format包中的
DateTimeFormatter:时间格式化
下面我们通过例子来看如何使用java8新的日期时间库
1、获取今天的日期
LocalDate todayDate = LocalDate.now(); System.out.println("今天的日期:"+todayDate); //结果 今天的日期:2016-10-20
2、指定日期,进行相应操作
3、生日检查或者账单日检查
开发过程中,经常需要为过生日的用户送上一些祝福,例如,用户的生日为1990-10-12,如果今天是2016-10-12,那么今天就是用户的生日(按公历/身份证日期来算),那么通过java8新的日期库,我们该如何来进行判断?
在java8中,可以使用MonthDay,该类不包含年份信息,当然还有一个类是YearMonth
LocalDate birthday = LocalDate.of(1990, 10, 12); MonthDay birthdayMd = MonthDay.of(birthday.getMonth(), birthday.getDayOfMonth()); MonthDay today = MonthDay.from(LocalDate.of(2016, 10, 12)); System.out.println(today.equals(birthdayMd)); //结果 true
4、获取当前的时间
日期主要是使用LocalTime,该类不包含日期,只有时间信息
5、日期前后比较
比较2个日期哪个在前,哪个在后,java8 LocalDate提供了2个方法,isAfter(),isBefore
LocalDate today = LocalDate.now(); LocalDate specifyDate = LocalDate.of(2015, 10, 20); System.out.println(today.isAfter(specifyDate)); //true
6、处理不同时区的时间
java8中,将日期,时间,时区都很好的进行了分离。
7、比较两个日期之前时间差
在项目中,经常需要比较两个日期之间相差几天,或者相隔几个月,我们可以使用java8的Period来进行处理。
LocalDate today = LocalDate.now(); LocalDate specifyDate = LocalDate.of(2015, 10, 2); Period period = Period.between(specifyDate, today); System.out.println(period.getDays()); //4 System.out.println(period.getMonths()); //1 System.out.println(specifyDate.until(today, ChronoUnit.DAYS)); //401 //输出结果 4 1 401
我们可以看到,我们使用Period类比较天数,比较奇怪,他返回的值,并不是2个日期之间总共的天数差,而是一个相对天数差,比如,5月1日,和10月2日,他比较的是仅仅2个天之间的差,那1号和2号,相差1天,而实际上,因为中间相差了好几个月,所以真正的天数差肯定不是1天,所以我们可以使用until,并指明精度单位是days,就可以计算真正的天数差了。
8、日期时间格式解析、格式化
在java8之前,我们进行时间格式化主要是使用SimpleDateFormat,而在java8中,主要是使用DateTimeFormatter,java8中,预定义了一些标准的时间格式,我们可以直接将时间转换为标准的时间格式:
String specifyDate = "20151011"; DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE; LocalDate formatted = LocalDate.parse(specifyDate,formatter); System.out.println(formatted); //输出 2015-10-11
当然,很多时间标准的时间格式可能也不满足我们的要求,我们需要转为自定义的时间格式
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("YYYY MM dd"); System.out.println(formatter2.format(LocalDate.now())); //结果 2015 10 11
9、java8 时间类与Date类的相互转化
在转换中,我们需要注意,因为java8之前Date是包含日期和时间的,而LocalDate只包含日期,LocalTime只包含时间,所以与Date在互转中,势必会丢失日期或者时间,或者会使用起始时间。如果转LocalDateTime,那么就不存在信息误差。
- 上一篇: JAVA基础——字符串日期的转换、获取前几天日期
- 下一篇: Java日期查询(java查询时间)
猜你喜欢
- 2024-09-19 Oracle查询语句,你知道几个?(oracle查询数据有哪几种方法)
- 2024-09-19 Java.time时间处理(java处理时间格式)
- 2024-09-19 浅谈Java8日期时间处理(java日期比较)
- 2024-09-19 「案例学习」Java8 日期时间(「案例学习」Java8 日期时间段)
- 2024-09-19 Java时间类介绍:Date的使用(java中date类型的日期应该怎么写)
- 2024-09-19 Java日期时间(javadoc 日期)
- 2024-09-19 你知道吗,Linux下竟然无法获取文件创建时间
- 2024-09-19 Java 8新特性探究(七)深入解析日期和时间-JSR310
- 2024-09-19 100个Java工具类之46:日期工具类之常用日期获取
- 2024-09-19 【Java】Vert.x Jackson 序列化后日期数据正常展示
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)