java新时间类
时间
java8以前使用的时间很多方法都已经废弃了,而且不是线程安全的,java8提供了一系列的时间类,这些时间类都是线程安全的
LocalDate、LocalTime、LocalDateTime
这三个关于时间的类在使用上都类似
/**
* LocalDate
*/
@Test
public void test1() {
LocalDate date1 = LocalDate.now();
System.out.println(date1);//2020-03-30
LocalDate plusYears = date1.plusYears(1);
System.out.println(plusYears);//2021-03-30
LocalDate minusDays = date1.minusDays(2);
System.out.println(minusDays);//2020-03-28
LocalDate date2 = LocalDate.of(2019, 3, 30);
System.out.println(date2.getYear());//2019
}
/**
* LocalTime
*/
@Test
public void test2() {
LocalTime now = LocalTime.now();
System.out.println(now);//21:15:23.418
int minute = now.getMinute();
System.out.println(minute);//15
int second = now.getSecond();
System.out.println(second);//23
LocalTime of = LocalTime.of(10, 10, 10);
System.out.println(of);//10:10:10
LocalTime minusMinutes = of.minusMinutes(2);
System.out.println(minusMinutes);//10:08:10
LocalTime plusHours = of.plusHours(2);
System.out.println(plusHours);//12:10:10
}
/**
* LocalDateTime
*/
@Test
public void test3() {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);//2020-03-30T21:20:37.961
int minute = now.getMinute();
System.out.println(minute);//20
LocalDateTime plusMinutes = now.plusMinutes(20);
System.out.println(plusMinutes);//2020-03-30T21:40:37.961
LocalDateTime minusYears = now.minusYears(2);
System.out.println(minusYears);//2018-03-30T21:20:37.961
LocalDateTime of = LocalDateTime.of(2021, 3, 30, 21, 19, 50);
System.out.println(of);//2021-03-30T21:19:50
}
时间戳
/**
* Instant
*/
@Test
public void test4() {
Instant now = Instant.now();
System.out.println(now);//2020-03-30T13:26:10.640Z
Instant plusSeconds = now.plusSeconds(10);
System.out.println(plusSeconds);//2020-03-30T13:26:20.640Z
//获取时间戳相对于1970年0时0分0秒的毫秒数
long epochMilli = plusSeconds.toEpochMilli();
System.out.println(epochMilli);//1585574780640
}
Duration获取时间间隔
/**
* Duration
*/
@Test
public void test5() {
Instant start = Instant.now();
Instant end = start.plusSeconds(10);
Duration duration = Duration.between(start, end);
long seconds = duration.getSeconds();
//获取时间间隔的秒数
System.out.println(seconds);//10
//获取时间间隔的毫秒数
long millis = duration.toMillis();
System.out.println(millis);//10000
}
Peroid获取日期间隔
@Test
public void test6() {
LocalDate date1 = LocalDate.now();
LocalDate date2 = date1.plusYears(2);
Period period = Period.between(date1, date2);
//获取两时间间隔的月数,指两个月份的间隔数,并不是时间间隔的总月数
int months = period.getMonths();
System.out.println(months);//0
}
TemporalAdjuster矫正日期
@Test
public void test7() {
LocalDate date1 = LocalDate.now();
System.out.println(date1);//2020-03-31
//TemporalAdjusters类中封装了一些常用地时间矫正方法
TemporalAdjuster next = TemporalAdjusters.next(DayOfWeek.FRIDAY);
LocalDate date2 = date1.with(next);
System.out.println(date2);//2020-04-03
//自定义时间矫正器
LocalDate date3 = date1.with(x->{
LocalDate ld=(LocalDate)x;
DayOfWeek dayOfWeek = ld.getDayOfWeek();
if(dayOfWeek.equals(DayOfWeek.FRIDAY)) {
return ld.plusDays(3);
}else if(dayOfWeek.equals(DayOfWeek.SATURDAY)) {
return ld.plusDays(2);
}else {
return ld.plusDays(1);
}
});
System.out.println(date3);//2020-04-01
}
由于TemporalAdjuster是一个函数式接口,所以我们可以使用lambda表达式自定义矫正规则
@FunctionalInterface
public interface TemporalAdjuster {
Temporal adjustInto(Temporal temporal);
}
DateTimeFormatter格式化日期时间
@Test
public void test8() {
LocalDateTime dateTime1 = LocalDateTime.now();
System.out.println(dateTime1);//2020-03-31T18:28:04.256
DateTimeFormatter formatter1 = DateTimeFormatter.ISO_DATE;
String format1 = dateTime1.format(formatter1);
System.out.println(format1);//2020-03-31
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒");
String format2 = dateTime1.format(formatter2);
System.out.println(format2);//2020年03月31日18时28分04秒
LocalDateTime dateTime2 = LocalDateTime.parse(format2, formatter2);
System.out.println(dateTime2);//2020-03-31T18:28:04
}
ZoneDate
@Test
public void test9() {
//获取可用时区
ZoneId.getAvailableZoneIds().forEach(System.out::println);
LocalDate date1 = LocalDate.now(ZoneId.of("Asia/Tokyo"));
System.out.println(date1);//2020-03-31
}
ZoneTime
@Test
public void test10() {
LocalTime time1 = LocalTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(time1);//19:44:15.228
OffsetTime atOffset = time1.atOffset(ZoneOffset.ofHours(2));
System.out.println(atOffset);//19:44:15.228+02:00
}
ZoneDateTime
@Test
public void test11() {
LocalDateTime dateTime1 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(dateTime1);//2020-03-31T18:51:07.136
ZonedDateTime atZone = dateTime1.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(atZone);//2020-03-31T18:51:07.136+08:00[Asia/Shanghai] +09:00表示时间比格林尼治时间快9小时
}
java新时间类的更多相关文章
- Java 线程安全LocalTime 和LocaldateTime 新的Date和Time类 -JDK8新时间类的简单使用
不可变类且线程安全 LocalDate .java.time.LocalTime 和LocaldateTime 新的Date和Time类 DateTimeFormatter ==https://ww ...
- Java中时间类中的Data类与Time类
小简博客 - 小简的技术栈,专注Java及其他计算机技术.互联网技术教程 (ideaopen.cn) Data类 Data类中常用方法 boolean after(Date date) 若当调用此方法 ...
- Java基础-时间类
关于java中六个时间类的使用和区别 java.util.Date java.sql.Date ,java.sql.Time , java.sql.Timestamp java.text.Simple ...
- Java日期时间类
日期时间类有三种: 一.java.util.Date:一般用于声明日期时间类型的变量. 二.java.sql.Date:一般用于数据库日期时间的映射. 三.java.util.Calendar:一般用 ...
- Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用
JDK8中增加了一系列时间的类, (据说)是为了干掉过去的Date,Calendar类的, 过去的Date类(据说)有着线程不安全等诸多弊端, 至于我的个人感受就是用起来实在是很麻烦,我一般封装成几个 ...
- Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解
前言 java 8 中引入的两个与日期相关的新类:Period 和 Duration.两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值.他们 ...
- springboot Thymeleaf中格式化jsr310新日期时间类(LocalDateTime,LocalDate)--thymeleaf格式化LocalDateTime,LocalDate等JDK8新时间类
依赖maven包 <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>th ...
- java最全时间类及用法
对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...
- java时间类Date、Calendar及用法
对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...
随机推荐
- Flutter调研(2)-Flutter从安装到运行成功的一些坑
工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置. —— 在mac ...
- FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比(转)
转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...
- python基础-基本概念
python概念介绍 python是一门动态解释型的强类型定义语言,创始人吉多·范罗苏姆(Guido van Rossum) #编译型语言 编译型:一次性将所有程序编译成二进制文件 缺点:开发效率低, ...
- Python基本小程序
目录 Python基本小程序 一.筛选从1-100所有的奇数 二.筛选从0-100所有的偶数 三.求1-100之间所有的偶数和,奇数和 四.三个数由小到大输出 五.四个数字重复数字的三位数 Pytho ...
- 从0开发3D引擎(十一):使用领域驱动设计,从最小3D程序中提炼引擎(第二部分)
目录 上一篇博文 本文流程 回顾上文 解释基本的操作 开始实现 准备 建立代码的文件夹结构,约定模块文件的命名规则 模块文件的命名原则 一级和二级文件夹 api_layer的文件夹 applicati ...
- 全网最详细的一篇Flutter 尺寸限制类容器总结
Flutter中尺寸限制类容器组件包括ConstrainedBox.UnconstrainedBox.SizedBox.AspectRatio.FractionallySizedBox.Limited ...
- 前端每日实战:152# 视频演示如何用纯 CSS 创作一个圆点错觉效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gBwzKR 可交互视频 此视频是可 ...
- 细说集群技术(Cluster)
今天本人给大家讲解一些我对集群技术一个理解,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 集群(Cluster)技术:通过此可以用较低的成本获取较高的性能 ...
- eetcode必要技巧--动态规划(一)
首先我们要搞清楚什么是动态规划 动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法. 当然这个很难理解,但是按 ...
- 浅谈Java开发三层架构
三层架构,一般来说就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 概念简介 1.表现层(UI):简单来说,就是展现 ...