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 ...
随机推荐
- LeetCode--二叉树1--树的遍历
LeetCode--二叉树1--树的遍历 一 深度遍历 深度遍历里面由 三种遍历方式,两种实现方法.都要熟练掌握. 值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行. 也就是说,当 ...
- 什么是Activiti
什么是Activiti Activiti属于工作流引擎的一个开源实现.Activiti由Tom Bayen发起.在2010年5月发布了第一个版本.命名也很有意思的采取了Activities(活动)的化 ...
- PHP文件上传 (以上传txt文件为例)
1.前端代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- Web前端经典面试试题(二)
上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...
- Flutter 拖拽排序组件 ReorderableListView
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 ReorderableListView是通过长按拖动某一项 ...
- Could not find a valid gem 'redis' (= 0)
Could not find a valid gem 'redis' (= 0) 报错详情如下: ERROR: Could not find a valid gem 'redis' (>= 0) ...
- RabbitMQ 消息模式
消息模式实例 视频教程:https://ke.qq.com/course/304104 编写代码前,最好先添加好用户并设置virtual hosts 一.简单模式 1.导入jar包 <depen ...
- angular - collapse--TemplateRef
用的ant collapse组件 需要自定义Header 请忽略前面的dw... 主要是TemplateRef<void> 查了半天.可以实现效果,直接上代码,我也不懂为什么 反正实现了 ...
- 5W2H方法:七问分析法
5W2H分析方法也叫七问分析法,是二战中美国陆军兵器修理部首创.简单.方便.易于理解.使用,富有启发意义,被广泛应用于企业管理和技术活动,对于决策和执行性的措施也非常有帮助,有助于弥补考虑问题的疏漏. ...
- js 实现字符串的查找和替换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...