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工具类. ...
随机推荐
- NuGet Package Explorer 中文版
Id:NuGet Package Explorer 中文版 Description:基于原版 5.7.170 的绿色中文版,无任何‘添加剂’ Version:5.7.170 Download:Gith ...
- Python 创建用户界面之 PyQt5 的使用
之前给大伙介绍了下 tkinter,有朋友希望小帅b对其它的 Python GUI 框架也说道说道,那么今天就来说说 PyQt5 如何创建用户界面. 很多人学习python,不知道从何学起.很多 ...
- SonarQube 自定义规则开发
SonarQube 自定义规则开发 满足一些特定需求的时候,需要自己开发代码规则. 环境 和前文的演示环境一致. 步骤 开发步骤见 Writing Custom Java Rules 101,这是官方 ...
- SQL Server中的集合运算: UNION, EXCEPT和INTERSECT
SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种. 集合运算的基本使用 1.UNION(合并两个查询结果集,隐式DINSTINCT,删除重复 ...
- 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus
1. 前言 在上一文中我根据Mybatis中Mapper的生命周期手动实现了一个简单的通用Mapper功能,但是遗憾的是它缺乏实际生产的检验.因此我选择更加成熟的一个Mybatis开发增强包.它就是已 ...
- BLE MESH 学习[1] - ESP32 篇
BLE MESH 学习 BLE MESH 是一种蓝牙(n:m)组网的技术. 本篇先介绍 BLE MESH 到使用 ESP32 的官方示例对其进行学习讲解. 后面会进一步学习 SIG 的 BLE MES ...
- windows下mongoDB的下载和安装
1.进入mongoDB官网,官网地址:https://www.mongodb.com 2. 点击Try free按钮,进入下载页面 3.点击download进行下载:下载完成如下图: 4.点击下载的 ...
- 用终端命令行(BASH)将本地项目上传到Github并提交代码
第一步: 在Github上创建自己的repository 第二步:建立本地仓库cd到你的本地项目根目录下,执行git命令 1:$ cd 到你的项目目录下 2:$ git init 第三步:将本地项目工 ...
- hook框架-frida简单使用模板以及frida相关接口
一目录结构 ├── test.py #py脚本 └── test.js #js脚本 一.py脚本 test.py import frida import sys #连接设备app dev=frida. ...
- Mybatis入门(四)------联表查询
Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...