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 新增工具类的更多相关文章

  1. jdk1.8 时间工具类,可以满足基本操作

    时间工具类 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final S ...

  2. JDK1.8新特性——Collector接口和Collectors工具类

    JDK1.8新特性——Collector接口和Collectors工具类 摘要:本文主要学习了在Java1.8中新增的Collector接口和Collectors工具类,以及使用它们在处理集合时的改进 ...

  3. JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(一)

    未完待续 ........ 由于SimpleDateFormat存在线程安全问题,所以在JDK1.8中使用LocalDate和LocalDateTime来进行日期的工具类使用,下边就是原创的Local ...

  4. 基于jdk1.7实现的excel导出工具类

    通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...

  5. 时间工具类之“ JDK1.8中 LocalDate、LocalTime、LocalDateTime、LocalDateTimeUtil四个时间工具类”

    一.使用的原因 在JDK8发布的时候,推出了LocalDate.LocalTime.LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作. 在Java8之 ...

  6. 并发工具类(五) Phaser类

    前言   JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...

  7. 《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&并发容器类&同步工具类,消费者模式

    上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Has ...

  8. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

  9. java常用工具类(java技术交流群57388149)

    package com.itjh.javaUtil;   import java.util.ArrayList; import java.util.List;   /** * * String工具类. ...

随机推荐

  1. 实验06——java自动封箱、自动拆箱

    package cn.tedu.demo; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @version 1.0 * @创建时间:2020年7月17日 上 ...

  2. mqtt第一次接触

    一.接触的原因 公司最近要求接手关于系统集成道闸的部分,其中系统和第三方系统是通过mqtt进行交互的.所以提前了解一下mqtt的基础概念. 二.mqtt的基本概念 1. mqtt的定义 Message ...

  3. spring data jpa 代码生成!!(精华帖)

    通过数据库动态生成自己想要生成的各种模板,需要了解grovery. view -> Tool Windows -> Database + -> Data source -> M ...

  4. XSS 渗透思路笔记

    了解XSS首先要了解HTML里面的元素:共有5种元素:空元素.原始文本元素. RCDATA元素.外来元素以及常规元素. 空元素area.base.br.col. command. embed.hr.i ...

  5. 2020-04-09:TCP的四次挥手中为什么要有TIME_WAIT状态?

    TIME_WAIT状态存在有两个原因.<1>可靠终止TCP连接.如果最后一个ACK报文因为网络原因被丢弃,此时server因为没有收到ACK而超时重传FIN报文,处于TIME_WAIT状态 ...

  6. C#开发笔记,点点细微,处处真情,记录开发中的难言之隐

    该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/956 访问. 概述 本系列文章将会向大家介绍本人实际开发过程中所遇到技术 ...

  7. C#LeetCode刷题之#559-N叉树的最大深度​​​​​​​(Maximum Depth of N-ary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4088 访问. 给定一个 N 叉树,找到其最大深度. 最大深度是指 ...

  8. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4084 访问. 计算给定二叉树的所有左叶子之和. 3      / ...

  9. Umlet和draw.io 使用心得

    文章目录 软件使用心得 1. Umlet 画图软件 1.1 前言 1.2 优点 1.3使用小trick 1.3.1 灵活改变箭头形式 1.3.2 整体复制 1.3.3 快速复制 2. draw.io ...

  10. Spring Security报异常 Encoded password does not look like BCrypt

    控制台报错: Encoded password does not look like BCrypt 意思是前端传回去的密码格式与数据库里的密码格式不匹配,这样即使密码正确也无法校验.自然也就无法登录. ...