LocalDate和LocalTime的用法介绍
在JAVA中,常用的处理日期和时间的类主要有Date,Calendar,而在JDK1.8中,新增了两个处理日期和时间的类,一个是LocalDate,另一个是LocalTime,下面我来介绍一下这两个类中常用方法的用法。
1、LocalDate
LocalDate主要是用来处理日期的类,主要有以下方法:
方法 | 说明 | 举例 |
LocalDate.now() | 获取当前日期 |
LocalDate localDate = LocalDate.now(); System.out.println(localDate); 运行结果为:2019-01-07 |
LocalDate.of(int year, int month, int dayOfMonth) |
根据参数设置日期,参数分别为年,月,日 |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate); 运行结果为:2019-01-07 |
localDate.getDayOfMonth() localDate.getDayOfWeek() localDate.getDayOfYear() |
获取当前日期是所在月的第几天 获取当前日期是星期几(星期的英文全称) 获取当前日期是所在年的第几天 |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.getDayOfMonth()); System.out.println(localDate.getDayOfWeek()); System.out.println(localDate.getDayOfYear()); 运行结果为:7,MONDAY,7 |
localDate.getMonth() localDate.getMonthValue() localDate.lengthOfMonth() |
获取当前日期所在月份(月份的英文全称)
获取当前日期所在月份的数值 获取当前日期所在月份有多少天 |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.getMonth()); System.out.println(localDate.getMonthValue()); System.out.println(localDate.lengthOfMonth()); 运行结果为:JANUARY,1,31 |
localDate.lengthOfYear() localDate.isLeapYear() |
获取当前日期所在年有多少天 获取当前日期所在年是否是闰年 |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.lengthOfYear()); System.out.println(localDate.isLeapYear()); 运行结果为:365,false |
localDate.withDayOfMonth(int dayOfMonth) localDate.withDayOfYear(int dayOfYear) localDate.withMonth(int month) localDate.withYear(int year) |
with开头的方法,我的理解是将参数替换localDate中的对应 属性,重新计算得到新的日期。 将参数中的"日"替换localDate中的"日" 将参数中的天数替换localDate中的天数 将参数中的"月"替换localDate中的"月" 将参数中的"年"替换localDate中的"年" |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.withDayOfMonth(2)); System.out.println(localDate.withDayOfYear(40)); System.out.println(localDate.withMonth(2)); System.out.println(localDate.withYear(2020)); 运行结果为: 2019-01-02, 2019-02-09, 2019-02-07, 2020-01-07 |
localDate.minusDays(long days) localDate.minusWeeks(long weeks) localDate.minusMonths(long months) localDate.minusYears(long years) localDate.plusDays(long days) localDate.plusWeeks(long weeks) localDate.plusMonths(long months) localDate.plusYears(long years) |
将当前日期减一天 将当前日期减一周 将当前日期减一月 将当前日期减一年 将当前日期加一天 将当前日期加一周 将当前日期加一月 将当前日期加一年 |
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.minusDays(1)); System.out.println(localDate.minusMonths(1)); System.out.println(localDate.minusWeeks(1)); System.out.println(localDate.minusYears(1)); System.out.println(localDate.plusDays(1)); System.out.println(localDate.plusMonths(1)); System.out.println(localDate.plusWeeks(1)); System.out.println(localDate.plusYears(1)); 运行结果为: 2019-01-06 |
2、LocalTime
LocalTime主要是用来处理时间的类,主要有以下方法:
方法 | 说明 | 举例 |
LocalTime.now() | 获取当前时间 |
LocalTime localTime = LocalTime.now(); System.out.println(localTime); 运行结果为:22:53:44.277 |
LocalTime.of(int hour, int minute) LocalTime.of(int hour, int minute, int second) |
根据参数设置时间,参数分别为时,分 根据参数设置时间,参数分别为时,分,秒 |
LocalTime localTime = LocalTime.of(12,35,59); System.out.println(localTime); localTime = LocalTime.of(12,35); System.out.println(localTime); 运行结果为:12:35:59,12:35 |
localTime.getHour() localTime.getMinute() localTime.getSecond() |
获取当前时间的小时数 获取当前时间的分钟数 获取当前时间的秒数 |
LocalTime localTime = LocalTime.of(12,35,59); System.out.println(localTime.getHour()); System.out.println(localTime.getMinute()); System.out.println(localTime.getSecond()); 运行结果为:12,35,59 |
localTime.withHour(int hour) localTime.withMinute(int minute) localTime.withSecond(int second) |
with开头的方法,我的理解是将参数替换localTime中的对应属性, 重新计算得到新的时间。 将参数中的"小时"替换localTime中的"小时" 将参数中的"分钟"替换localTime中的"分钟" 将参数中的"秒"替换localTime中的"秒" |
LocalTime localTime = LocalTime.of(12,35,59); System.out.println(localTime.withHour(1)); System.out.println(localTime.withMinute(1)); System.out.println(localTime.withSecond(1)); 运行结果为: 01:35:59 |
localTime.minusHours(long hours) localTime.minusMinutes(long minutes) localTime.minusSeconds(long seconds) localTime.plusHours(long hours) localTime.plusMinutes(long minutes) localTime.plusSeconds(long seconds) |
将当前时间减一小时 将当前时间减一分钟 将当前时间减一秒 将当前时间加一小时 将当前时间加一分钟 将当前时间加一秒 |
LocalTime localTime = LocalTime.of(12,35,59); System.out.println(localTime.minusHours(1)); System.out.println(localTime.minusMinutes(1)); System.out.println(localTime.minusSeconds(10)); System.out.println(localTime.plusHours(1)); System.out.println(localTime.plusMinutes(1)); System.out.println(localTime.plusSeconds(10)); 运行结果为: 11:35:59 |
3、日期 + 时间
从1和2中可以看出,LocalDate的方法主要都是用来处理日期的,而LocalTime的方法主要都是用来处理时间的,但两个类都提供了表示日期 + 时间的方法。
LocalDate提供了atTime方法,用来表示日期 + 时间
LocalDate localDate = LocalDate.of(2019,1,7); System.out.println(localDate.atTime(LocalTime.now())); System.out.println(localDate.atTime(10,30)); System.out.println(localDate.atTime(10,30,59));
运行结果为:
2019-01-07T23:21:32.804
2019-01-07T10:30
2019-01-07T10:30:59
LocalTime提供了atDate方法,用来表示日期 + 时间
LocalTime localTime = LocalTime.of(12,35,59); System.out.println(localTime.atDate(LocalDate.of(2019,1,7)));
运行结果为:2019-01-07T12:35:59
4、格式转换
从3中我们可以看出,表示日期 + 时间后,格式发生了变化,原来atTime和atDate方法的返回值都是LocalDateTime类,这个类把toString()方法重写了,导致输出的格式变化了。
@Override public String toString() {return date.toString() + 'T' + time.toString(); }
那么想要转换日期或时间的格式该怎么办呢?
LocalDate和LocalTime都提供了格式转换的方法,format和parse
方法 | 说明 | 举例 |
LocalDate.format(DateTimeFormatter formatter) |
将LocalDate类型的数据转换为String类型的数据,参数为DateTimeFormatter类,该类提供了ofPattern(String pattern)方法,可传入相应的日期格式: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-dd HH, yyyy-MM-dd HH:mm, yyyy-MM-dd HH:mm:ss 注:若LocalDate未调用atTime方法,则表示LocalDate只表示日期,则此时不能转换带有时间格式的表示式 |
LocalDate localDate = LocalDate.of(2019,1,7); LocalTime localTime = LocalTime.now();DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy"); System.out.println(localDate.atTime(localTime).format(f));DateTimeFormatter f2 = DateTimeFormatter.ofPattern("yyyy-MM"); System.out.println(localDate.atTime(localTime).format(f2));DateTimeFormatter f3 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); System.out.println(localDate.atTime(localTime).format(f3));DateTimeFormatter f4 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(localDate.atTime(localTime).format(f4));DateTimeFormatter f5 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); System.out.println(localDate.atTime(localTime).format(f5));DateTimeFormatter f6 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH"); System.out.println(localDate.atTime(localTime).format(f6)); 运行结果为: 2019 |
LocalTime.format(DateTimeFormatter formatter) |
将LocalTime类型的数据转换为String类型的数据,参数为DateTimeFormatter类, 该类提供了ofPattern(String pattern)方法,可传入相应的日期格式: yyyy, yyyy-MM, yyyy-MM-dd, yyyy-MM-dd HH, yyyy-MM-dd HH:mm, yyyy-MM-dd HH:mm:ss 注:若LocalTime未调用atDate方法,则表示LocalTime只表示时间,则此时不能转换带有日期格式的表示式 |
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); System.out.println(LocalTime.now().atDate(LocalDate.now()).format(formatter)); 运行结果为:2019-01-07 23:07:06 其他格式这里就不一一列举了 |
LocalDate.parse(CharSequence text) |
将日期字符串转换成LocalDate类型,不能转换带时间格式的字符串 |
System.out.println(LocalDate.parse("2019-10-15")); 运行结果为:2019-10-15 |
LocalTime.parse(CharSequence text) |
将时间字符串转换成LocalTime类型,不能转换带日期格式的字符串 |
System.out.println(LocalTime.parse("22:35:40")); 运行结果为:22:35:40 |
5、总结
JDK1.8将处理日期和时间的类从原来的Date,Calendar变成了LocalDate和LocalTime两个类,从原来的一个类处理日期 + 时间,变成了由两个类各司其职,更加体现了面向对象的思想,两个类都各自提供了相应范围内的方法,个人觉得有利有弊。有利的是两个类对各自范围内的日期(时间)的计算都提供了更好的处理方法,双方互不干扰,更加的方便。不利的是在同时需要日期和时间的场景下,这两个类目前提供的atTime和atDate方法还不能令人满意,使用起来不是很方便(还需要转换一下格式)。另外,LocalDate类型对应数据库的日期类型的字段时,是否可以像Date类型那样方便,有待研究。
LocalDate和LocalTime的用法介绍相关推荐
- LocalDate、LocalTime、LocalDateTime介绍
一.Date与LocalDate.LocalTime.LocalDateTime互转 1.Date转LocalDate.LocalTime.LocalDateTime Date date = new ...
- java8中LocalDate、LocalTime、LocalDateTime介绍
很久以前java8中就推出了新的Time API,旨在解决旧版Date和Calendar的缺陷.讲道理真的挺好用的,不过由其他工具对新版time的兼容并不够完善,导致现在使用还不够普及.大家都还在用老 ...
- Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
Java中 LocalDate.LocalTime.LocalDateTime三个时间工具类的使用介绍 一.背景: 之前在做项目的过程中,对日期时间类没有一个系统的了解,总是在用的时候去搜索一下,解决 ...
- JDK8 Instant类的使用和LocalDate,LocalTime 和 LocalDateTime的介绍。
简介 在Java 8中又为我们提供了新的日期类.它可以帮我们更精确的保存记录时间. 本文章主要介绍的就是Instant,LocalDate,LocalTime 和 LocalDateTime 这几个类 ...
- linux localtime 线程安全,LocalDate、LocalTime、LocalDateTime常用方法介绍(线程安全)...
一.JDK Release Notes: https://www.oracle.com/technetwork/java/javase/jdk-relnotes-index-2162236.html? ...
- LocalDate、LocalTime和LocalDateTime用法
一.LocalDate用法 1.1.获取当前时间,最大时间,最小时间 /*** 获取当前时间,最大时间,最小时间*/@Testpublic void demo01() {LocalDate now = ...
- Java 8 Time Api 使用(LocalDate,LocalTime和LocalDateTime等)
目录 1.概述 2. 旧的时间API(java8之前)的问题 3. 使用LocalDate,LocalTime和LocalDateTime 3.1.使用LocalDate 3.2.使用LocalTim ...
- 使用LocalDate,LocalTime和LocalDateTime
Java 8对日期和时间API进行了重大更改,这是在JSR 310:日期和时间API的 JDK中包括了Joda Time API . 此JSR由Joda Time的创建者Stephen Colebou ...
- 【java8】LocalDateTime、LocalDate与LocalTime的基本使用
一.介绍 java8之前有Date类和Calendar类,但存在着不少缺陷,在java8中Date类的很多方法已经被弃用. Date类不格式化可读性差,所以就需要格式化,使用SimpleDateFor ...
最新文章
- Redis介绍使用及进阶
- HDU 2222 AC自动机
- spark写出分布式的训练算法_利用 Spark 和 scikit-learn 将你的模型训练加快 100 倍...
- python次方运算_neg__python 魔术方法1 运算符重载
- 一个ubuntu server下的oracle10g简单生产库全库备份脚本
- 2016.02.23,英语,《Vocabulary Builder》Unit 01
- platform设备的添加
- 拓端tecdat|matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
- 小程序源码:独立后台带分销功能月老办事处交友盲盒
- python做积分_python曲线积分
- fc安卓模拟器_跨平台游戏模拟器RetroArch,一个软件畅玩FC 、MD、SFC、GBA游戏
- 土地利用转移矩阵的几种实现方法
- iOS ijkplayer 音视频同步
- Opencv环境的配置与基本使用
- 自定义组件开发六 自定义组件
- iptables添加IP段白名单
- 数据库卸载后安装不成功的问题
- .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类...
- 斐迅面试记录—Http协议中的Header
- python idle使用教程_pythonidle中文教程