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工具类. ...
随机推荐
- Java语言程序设计2019.9.16
1.Java的基本运行单位是类. 2.类是由方法和变量组成. 3.变量类型分为byte,int,double,long,short,boolean,char,float.java中整数类型默认的int ...
- Spring IoC是如何进行依赖注入的
依赖注入(DI) DI(Dependency Injection),Spring IoC 不是一种技术,而是一种思想,通过这种思想,能够指导我们设计出松耦合的程序代码.而Spring IoC这个思想的 ...
- System.out.println()相关源码
System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...
- Springboot快速入门篇,图文并茂
Springboot快速入门篇,图文并茂 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star!搜索关注微信公众号 [码出Offer] 领取各种学习资料! image-20 ...
- TCP学习指北
限于博主水平有限不敢说指南,但应该能够避免刚学TCP的同学出现找不着北的情况. TCP与UDP的区别 区别: UDP是无连接的,而TCP是面向连接的,传数据前要先建立连接. UDP可以一对多,多对多通 ...
- java 匿名对象与内部类
一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...
- 利用BeautifulSoup去除HTML指定标签和去除注释
去除指定标签 from bs4 import BeautifulSoup #去除属性ul [s.extract() for s in soup("ul")] # 去除属性svg [ ...
- unity探索者之protobuf的序列化和反序列化导致unity崩溃的问题研究
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7574569.html 这两天博主在接微信支付SDK的时候碰到一个非常恶心又诡异的问 ...
- Python版常见的排序算法
学习笔记 排序算法 目录 学习笔记 排序算法 1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.归并排序 7.堆排序 排序分为两类,比较类排序和非比较类排序,比较类排序通过比较 ...
- 如何选择一台适合Java开发的电脑
前言 最近在群里有同学求推荐Java开发用的电脑,所以胖哥就出个简单的专题,用我贫瘠的电脑知识来帮助大家选择适合开发的电脑配置.因为家里的主机已经带不动两个 IDEA 了,更别提开个 Docker 啥 ...