jdk1.8 新增工具类
optional
Optional.of(T t) : 创建一个 Optional 实例
Optional.empty() : 创建一个空的 Optional 实例
Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
isPresent() : 判断是否包含值
isPresent(Consumer c):如果存在值则消费
orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
orElseThrow(Supplier ex):如果不包含值则抛出异常
map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
flatMap(Function mapper):与 map 类似,要求返回值必须是Optional
时间API
Instant
/**
* Instant类用于获取时间戳
* 时间戳定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。
* <p>
* 因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。
* <p>
* 但是不同的时区,当前时间戳对应的当前时间是不同的。
*/
@Test
public void test() {
Instant instant = Instant.now();//默认获取的是utc时区(比北京时间少八个小时)
ZonedDateTime zonedDateTime = Instant.now().atZone(ZoneId.systemDefault());
LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();//将instant转为LocalDateTime
Instant instant1 = localDateTime.toInstant(ZoneOffset.ofHours(8));//将北京时间转为时间戳
long l = instant.toEpochMilli();//获取当前毫秒值
}
localDateTime LocalDate LocalTime
/**
* localDateTime 日期和时间
* LocalDate 日期
* LocalTime 时间
*/
@Test
public void testlocalDateTime() {
LocalDateTime localDateTime = LocalDateTime.now();//获取当前时间
DayOfWeek dayOfWeek = localDateTime.getDayOfWeek();//获得星期几
int dayOfYear = localDateTime.getDayOfYear();//获得今天是这一年的第几天
int year = localDateTime.getYear();//年
Month month = localDateTime.getMonth();//月
int dayOfMonth = localDateTime.getDayOfMonth();//日
int hour = localDateTime.getHour();//时
int minute = localDateTime.getMinute();//分
int second = localDateTime.getSecond();//秒
}
Duration
/**
* Duration 计算时间间隔
* public static Duration between(Temporal startInclusive, Temporal endExclusive)
* Temporal的实现类包括了localDateTime,LocalDate,LocalTime,Instant类用于获取时间戳。。。
*/
@Test
public void test3() {
LocalDateTime start = LocalDateTime.of(2020, 1, 3, 1, 1, 1, 1);
LocalDateTime end = LocalDateTime.now();
Duration duration = Duration.between(start, end);
long l = duration.toNanos();//获取间隔纳秒
long l1 = duration.toDays();//获取天
long l2 = duration.toMillis();//获取毫秒
long seconds = duration.getSeconds();//秒
}
TemporalAdjuster
/**
* TemporalAdjuster:时间矫正器(有时我们可能需要获取,例如将日期调整到"下个周日"等操作)
* TemporalAdjusters:提供了大量静态方法用TemporalAdjuster实现
*/
@Test
public void test4() {
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime nextMonday = dateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY));//获取到下一个周一的日期,时分秒不变
//自定义时间矫正器,获取下一个工作日
TemporalAdjuster adjuster = i -> {
DayOfWeek dayOfWeek = ((LocalDateTime) i).getDayOfWeek();
if (DayOfWeek.FRIDAY.equals(dayOfWeek)) return ((LocalDateTime) i).plusDays(3);
else if (DayOfWeek.SATURDAY.equals(dayOfWeek)) return ((LocalDateTime) i).plusDays(2);
else return ((LocalDateTime) i).plusDays(1);
};
LocalDateTime dateTime1 = dateTime.with(adjuster);
}
DateTimeFormatter
/**
* 日期格式化DateTimeFormatter
*/
@Test
public void test5() {
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyyMMdd");//时间格式
TemporalAccessor temporalAccessor = pattern.parse("20201122");//解析时间
LocalDate localDate = LocalDate.from(temporalAccessor);
LocalDate now = LocalDate.now();
String str = now.format(pattern);//将时间转为yyyyMMdd
}
jdk1.8 新增工具类的更多相关文章
- jdk1.8 时间工具类,可以满足基本操作
时间工具类 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final S ...
- JDK1.8新特性——Collector接口和Collectors工具类
JDK1.8新特性——Collector接口和Collectors工具类 摘要:本文主要学习了在Java1.8中新增的Collector接口和Collectors工具类,以及使用它们在处理集合时的改进 ...
- JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(一)
未完待续 ........ 由于SimpleDateFormat存在线程安全问题,所以在JDK1.8中使用LocalDate和LocalDateTime来进行日期的工具类使用,下边就是原创的Local ...
- 基于jdk1.7实现的excel导出工具类
通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...
- 时间工具类之“ JDK1.8中 LocalDate、LocalTime、LocalDateTime、LocalDateTimeUtil四个时间工具类”
一.使用的原因 在JDK8发布的时候,推出了LocalDate.LocalTime.LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作. 在Java8之 ...
- 并发工具类(五) Phaser类
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式
上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...
- .net使用正则表达式校验、匹配字符工具类
开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...
- java常用工具类(java技术交流群57388149)
package com.itjh.javaUtil; import java.util.ArrayList; import java.util.List; /** * * String工具类. ...
随机推荐
- 实验06——java自动封箱、自动拆箱
package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 1.0 * @创建时间:2020年7月17日 上 ...
- mqtt第一次接触
一.接触的原因 公司最近要求接手关于系统集成道闸的部分,其中系统和第三方系统是通过mqtt进行交互的.所以提前了解一下mqtt的基础概念. 二.mqtt的基本概念 1. mqtt的定义 Message ...
- spring data jpa 代码生成!!(精华帖)
通过数据库动态生成自己想要生成的各种模板,需要了解grovery. view -> Tool Windows -> Database + -> Data source -> M ...
- XSS 渗透思路笔记
了解XSS首先要了解HTML里面的元素:共有5种元素:空元素.原始文本元素. RCDATA元素.外来元素以及常规元素. 空元素area.base.br.col. command. embed.hr.i ...
- 2020-04-09:TCP的四次挥手中为什么要有TIME_WAIT状态?
TIME_WAIT状态存在有两个原因.<1>可靠终止TCP连接.如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态 ...
- C#开发笔记,点点细微,处处真情,记录开发中的难言之隐
该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/956 访问. 概述 本系列文章将会向大家介绍本人实际开发过程中所遇到技术 ...
- C#LeetCode刷题之#559-N叉树的最大深度(Maximum Depth of N-ary Tree)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4088 访问. 给定一个 N 叉树,找到其最大深度. 最大深度是指 ...
- C#LeetCode刷题之#404-左叶子之和(Sum of Left Leaves)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4084 访问. 计算给定二叉树的所有左叶子之和. 3 / ...
- Umlet和draw.io 使用心得
文章目录 软件使用心得 1. Umlet 画图软件 1.1 前言 1.2 优点 1.3使用小trick 1.3.1 灵活改变箭头形式 1.3.2 整体复制 1.3.3 快速复制 2. draw.io ...
- Spring Security报异常 Encoded password does not look like BCrypt
控制台报错: Encoded password does not look like BCrypt 意思是前端传回去的密码格式与数据库里的密码格式不匹配,这样即使密码正确也无法校验.自然也就无法登录. ...