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 ...
随机推荐
- USB小白学习之路(5) HID鼠标程序
HID鼠标程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...
- PyQt5之音乐播放器
按照自己思路简单写了个桌面播放器,只有自己喜欢的歌.使用QtDesigner设计的ui界面,功能简单,还有很多bug@~@,代码奉上: music_button.ui使用扩展工具pyuic5生成了mu ...
- 从头认识js-函数表达式
定义函数的方式有两种: 1.函数声明(特征:函数声明提升,在执行代码之前会先读取函数声明,这就意味着可以把函数声明放在调用它的语句之后) 2.函数表达式(函数表达式与其他表达式一样,使用之前必须先声明 ...
- JVM优化之垃圾收集器以及内存分配
在jvm中,实现了多种垃圾收集器,包括:串行垃圾收集器.并行垃圾收集器.CMS(并发)垃圾收集器.G1垃圾收集器,接下来,我们一个个的了解学习. 串行垃圾收集器 串行垃圾收集器,是指使用单线程进行垃圾 ...
- Python -Selenium的安装和调用
安装selenium步骤: 1.安装pip(cmd命令行管理员方式): pip install pip 也可直接搜索pip,到官网下载安装 2.安装selenium(cmd命令行管理员方式): pip ...
- Windows安装python包出现PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问的问题解决方案
在python中安装sqlalchemy时,总是提示(当安装依赖有vs的python包时,可能会出现以下错误:) PermissionError: [WinError 32] 另一个程序正在使用此文件 ...
- Promise,Generator,Await/Async
上节中忘记讲:Iterator接口和Generator函数的关系了,Symbol.iterator方法的最简单的实现就是通过Generator函数: let myIterable = { [Symbo ...
- 10个机器学习人工智能开发框架和AI库(优缺点对比表)/贪心学院
概述 通过本文我们来一起看一些用于人工智能的高质量AI库,它们的优点和缺点,以及它们的一些特点. 人工智能(AI)已经存在很长时间了.然而,由于这一领域的巨大进步,近年来它已成为一个流行语.人工智能曾 ...
- for循环结合range使用方法
range概念:表示一个数据范围 基本的语法格式:range(开始数据,结束数据(不包括结束数据),步长) 记住一个公式:下一个数据=开始数据+步长 步长:表示的是数据前后的间隔 OK,基本的概念和语 ...
- WEB渗透 - HTTP协议基础
年初八 星灯花 https只能提高传输层安全 每一次客户端和服务端的通信都是独立的过程 cookie包括了sessionID和其他信息 重要的header S - C Set-Cookie:服务器发给 ...