java 8 新特性之日期-时间 API

Date-Time API简介

在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期类都是可变的;日期/时间类的定义并不一致,在java.util和java.sql的包下都含有Date类,在开发过程中极易出错; 日期类并不提供国际化,没有时区支持。为了解决以上问题,Java8在java.time 包下提供了很多新的 API,常用的类包括LocalDate、LocalTime、LocalDateTime,用以处理日期,时间,日期/时间等

LocalDate类

LocalDate是一个不可变类,在不考虑时区的情况下可以对日期(不包括时间)进行各种操作,它的默认格式是yyyy-MM-dd
获取当前日期以及年、月、日
代码示例:

//获取当前日期以及年、月、日
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int day = localDate.getDayOfMonth();
System.out.println("当前日期:" + localDate);
System.out.println("年:" + year + "  月:" + month + "  日:" + day);

运行结果:

当前日期:2018-12-12
年:2018  月:12  日:12

获取指定的日期
代码示例:

//获取指定的日期
LocalDate specifiedDay = LocalDate.of(2008, 8, 18);
System.out.println("指定日期:" + specifiedDay);

运行结果:

指定日期:2008-08-18

使用DateTimeFormatter进行日期格式化
代码示例:

//使用DateTimeFormatter类进行日期格式化
LocalDate localDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println("格式化后的日期:" + formatter.format(localDate));//将字符串转为LocalDate类型
LocalDate newDate =LocalDate.parse("2018年12月12日", formatter);
System.out.println("字符串转日期类型:" + newDate);

运行结果:

格式化后的日期:2018年12月12日
字符串转日期类型:2018-12-12

比较两个时间的先后顺序以及是否相等
代码示例:

LocalDate localDate = LocalDate.now();
LocalDate otherDate = LocalDate.of(2018, 11, 11);//equals方法用于比较两个日期是否相等
if(localDate.equals(otherDate)) {System.out.println("localDate与otherDate相等!");
} else {//isAfter和isBefore方法用于比较两个日期前后顺序if(localDate.isAfter(otherDate)) {System.out.println("localDate晚于otherDate!");}if(localDate.isBefore(otherDate)) {System.out.println("localDate早于otherDate!");}
}

运行结果:

localDate晚于otherDate!

对日期做加减运算
代码示例:

LocalDate localDate = LocalDate.now();
System.out.println("2年后日期:" + localDate.plusYears(2));
System.out.println("6月后日期:" + localDate.plusMonths(6));
System.out.println("3周后日期:" + localDate.plusWeeks(3));
System.out.println("15天后日期:" + localDate.plusDays(15));System.out.println("2年前日期:" + localDate.minusYears(2));
System.out.println("6月前日期:" + localDate.minusMonths(6));
System.out.println("3周前日期:" + localDate.minusWeeks(3));
System.out.println("15天前日期:" + localDate.minusDays(15));

运行结果:

2年后日期:2020-12-12
6月后日期:2019-06-12
3周后日期:2019-01-02
15天后日期:2018-12-272年前日期:2016-12-12
6月前日期:2018-06-12
3周前日期:2018-11-21
15天前日期:2018-11-27

获取日期间隔的天数
代码示例:

//获取某年份的第N天的日期
LocalDate specialDay = LocalDate.ofYearDay(2018, 100);
System.out.println("2018年的第100天:" + specialDay);
//获取两个日期的间隔天数
long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay();
System.out.println("间隔天数: " + intervalDay);

运行结果:

2018年的第100天:2018-04-10
间隔天数:246

LocalTime类

LocalTime与LocalDate一样,也是一个不可变的类,默认格式是hh:mm:ss.zzz,它提供了对时间的各种操作
获取当前时间以及自定义时间
代码示例:

//获取当前时间、时、分、秒以及自定义时间
LocalTime localTime = LocalTime.now();
int hour = localTime.getHour();
int minute = localTime.getMinute();
int second = localTime.getSecond();
System.out.println("当前时间:" + localTime);
System.out.println("时:" + hour + "  分:" + minute + "  秒:" + second);//获取自定义时间
LocalTime specifiedTime = LocalTime.of(15, 30, 45);
System.out.println("自定义时间:" + specifiedTime);

运行结果:

当前时间:13:45:59.039
时:13  分:45  秒:59
自定义时间:15:30:45

使用DateTimeFormatter进行时间格式化
代码示例:

//使用DateTimeFormatter类进行时间格式化
LocalTime localTime = LocalTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分ss秒");
System.out.println("格式化后的时间:" + formatter.format(localTime));//将字符串转为LocalTime类型
LocalTime newTime = LocalTime.parse("20时35分45秒", formatter);
System.out.println("字符串转时间类型:" + newTime);

运行结果:

格式化后的时间:20时38分33秒
字符串转时间类型:20:35:45

比较两个时间的先后顺序
代码示例:

//equals方法比较两个时间是否相等
if(localTime.equals(specifiedTime)) {System.out.println("localTime与specifiedTime相等!");
} else {//isAfter、isBefore方法比较两个时间的先后顺序if(localTime.isAfter(specifiedTime)) {System.out.println("localTime晚于specifiedTime!");}if(localTime.isBefore(specifiedTime)) {System.out.println("localTime早于specifiedTime!");}
}

运行结果:

localTime早于specifiedTime!

对时间做加减运算
代码示例:

LocalTime localTime = LocalTime.now();
System.out.println("当前时间:" + localTime);
System.out.println("2小时后时间:" + localTime.plusHours(2));
System.out.println("30分钟后时间:" + localTime.plusMinutes(30));
System.out.println("500秒后日时间:" + localTime.plusSeconds(500));System.out.println("2小时前时间:" + localTime.minusHours(2));
System.out.println("30分钟前时间:" + localTime.minusMinutes(30));
System.out.println("500秒前时间:" + localTime.minusSeconds(500));

运行结果:

当前时间:14:10:15.666
2小时后时间:16:10:15.666
30分钟后时间:14:40:15.666
500秒后时间:14:18:35.6662小时前时间:12:10:15.666
30分钟前时间:13:40:15.666
500秒前时间:14:01:55.666

LocalDateTime类

LocalDateTime是一个不可变的日期-时间对象,它既包含了日期同时又含有时间,默认格式是yyyy-MM-ddTHH-mm-ss.zzz
获取当前日期时间以及自定义日期时间
示例代码:

 //获取当前的日期时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前的日期时间:" + localDateTime);//获取自定义的的日期时间
LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println("自定义的日期时间:" + specifiedDateTime);

运行结果:

当前的日期时间:2018-12-12T14:31:00.163
自定义的日期时间:2018-12-12T14:31:00.164

转化为日期和时间
代码示例:

//转化为LocalDate和LocalTime
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime();
System.out.println("当前日期:" + localDate);
System.out.println("当前时间:" + localTime);

运行结果:

当前日期:2018-12-12
当前时间:14:31:00.163

转载于:https://www.cnblogs.com/liantdev/p/10108504.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

向日葵在mac不能以服务器运行吗,mac远程桌面连接在哪?向日葵可以实现mac远程连接吗?...

目前大部分用户的电脑都是Windows系统的,也有部分用户用的Mac电脑,对于Mac电脑用户来说,许多操作与Windows都不同,比如他们就不知道mac远程桌面连接在哪?当遇到需要别人远程帮助时就无法调出,下面小编给大家讲解下它的…

根文件系统构建(BusyBox方式)

目录根文件系统简介BusyBox构建根文件系统BusyBox简介编译BusyBox构建根文件系统(生成bin、sbin、usr、linuxrc)向根文件系统添加lib库创建其他文件夹根文件系统初步测试完善根文件系统创建/etc/init.d/rcS文件创建/etc/fstab文件创建/etc/inittab文件根文件系统其他功能测试软…

ADODB下载地址

http://sourceforge.net/projects/adodb/files/adodb-php-4-and-5/转载于:https://blog.51cto.com/anxueyueying/1351041

kk 服务器信息,手机kk服务器设置

手机kk服务器设置 内容精选换一换已获取服务器管理员帐号与密码。打开CMD运行窗口,输入gpedit.msc,打开本地组策略编辑器。打开组策略在指定RD会话主机服务器的授权模式下拉列表中选择按用户。设置允许RD最大连接数位999999。设置结束已断开连接的会话为…

系统烧写方法(MfgTool烧写工具)

目录MfgTool 工具简介MfgTool 工作原理简介USB接线系统烧写原理烧写NXP 官方系统烧写自制的系统系统烧写网络开机自启动设置改造我们自己的烧写工具改造MfgTool烧写测试解决Linux 内核启动失败总结前面我们已经移植好了uboot 和linux kernle,制作好了根文件系统。但…

Android自带Monkey测试

Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有一系列的系统级事件。可以使用Monkey来给正在开发的程序做随机的…

BZOJ3435[Wc2014]紫荆花之恋——动态点分治(替罪羊式点分树套替罪羊树)

题目描述 强强和萌萌是一对好朋友。有一天他们在外面闲逛,突然看到前方有一棵紫荆树。这已经是紫荆花飞舞的季节了,无数的花瓣以肉眼可见的速度从紫荆树上长了出来。仔细看看的话,这个大树实际上是一个带权树。每个时刻它会长出一个新的叶子节…

捣蛋鹅显示服务器已满,无题大鹅模拟奖杯攻略分享

捣蛋鹅成就怎么解锁?游戏章节不是很长,不同章节中都有不同的奖杯需要解锁,有些比较简单,有的需要一点点技巧,小编这里给大家带来了“PSN lyplyp_lll”总结的无题大鹅模拟奖杯攻略分享,一起来看下文中具体的…

线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

参考:(四十二)线程——线程属性 作者:FadeFarAway 发布时间:2017-01-17 14:09:55 网址:https://blog.csdn.net/FadeFarAway/article/details/54576771 目录引入线程属性初始化一、线程的分离状态(detached …

【微信小游戏实战】零基础制作《欢乐停车场》二、关卡设计

1、游戏立项 微信小游戏中有一款《欢乐停车场Plus》的小游戏,大家可以搜索玩下。这是一款益智类的小游戏,游戏中有红、黄、绿、蓝、紫5辆豪车6个停车位,玩家通过可行走路线移动小车,最终让各颜色的小车停到对应的颜色车位&#xf…

服务器端密钥库文件,使用密钥库文件为SOAP运行客户端WS

该错误表示在您的信任库中找不到服务器证书。检查.keystore文件的内容以确定它是否包含服务器证书(在truststore中列为trustedEntry)。如果是&#xff0c;请设置以下系统属性(使用-D JVM参数或System.setProperty())。javax.net.ssl.trustStore<>javax.net.ssl.trustStor…

线程同步(互斥锁、条件、读写锁、信号量)

参考&#xff1a;&#xff08;四十三&#xff09;线程——线程同步&#xff08;互斥锁、读写锁、条件变量、信号量&#xff09; 作者&#xff1a;FadeFarAway 发布时间&#xff1a;2017-01-17 21:25:28 网址&#xff1a;https://blog.csdn.net/FadeFarAway/article/details/545…

Nginx使用Expires增加浏览器缓存加速(转)

转载自&#xff1a;Nginx使用Expires增加浏览器缓存加速 Nginx可以更改HTTP头部&#xff0c;这个是Web服务器必须的&#xff0c;当然Nginx更可以支持在HTTP头部中添加Expires等相关信息&#xff0c;增强浏览器缓存&#xff0c;是网页加载速度增强。 Nginx中使用Expires增强浏览…

Linux curl命令详解

转自&#xff1a;https://www.cnblogs.com/duhuo/p/5695256.html 命令&#xff1a;curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&#xff0c;但按传统…

MAC地址、IP地址、ARP协议

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 说明&#xff1a;讲的不错&#xff0c;后期可以继续看此视频学习网络知识 目录MAC地址IP地址ARP协议MAC地址 IP地址 ARP协…

编程学习网站

2019独角兽企业重金招聘Python工程师标准>>> ‍ 刚开始学习编程&#xff0c;如果只是拿着书本拼命敲代码&#xff0c;肯定是非常枯燥的。如果不是非常有决心和毅力可能就会轻易放弃了&#xff0c;有没有学习坡度不那么陡的教程呢&#xff1f; 让我们可以先学点基本的…

C#字符处理

一丶C#删除最后一个字符 例&#xff1a;字符串 string str"1,2,3,4,5,,6,7,8,9," 去掉最后一个逗号 ","; 常用的方法&#xff1a; 1.SubString()方法 strstr.SubString(0,str.Length - 1); 2.Remove()方法 strstr.Remove(str.Length-1,1); 3.TrimEnd()方法…

ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

参考&#xff1a;堆栈指针寄存器 SP详解以及栈的作用 作者&#xff1a;蓝色鲜橙多 网址&#xff1a;https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sourceapp&app_version4.16.0&codeapp_1562916241&uLinkIdusr1mkqgl919blen 目录堆栈的实现方…

【译】将IDataRecord自动填充到实体的扩展方法

Mapper&#xff1a; Mapper的核心功能是创建一个委托函数并映射到一个目标类的实例。此委托是使用表达式树创建的一个lambda表达式。在这个函数中有一个双重循环&#xff0c;从 DataRecord 获取字段并和从实体类中获取的属性名称比较从而填充实体实例。所以第一个要求就是在使用…

U-Boot 图形化配置及其原理

目录U-Boot 图形化配置体验&#xff08;如何使能dns 命令&#xff09;menuconfig 图形化配置原理make menuconfig 过程分析Kconfig 语法简介1、mainmenu2、调用其他目录下的Kconfig 文件3、menu/endmenu 条目3、config 条目4、depends on 和select4、choice/endchoice5、menuco…