乐字节-Java8新特性之Date API
上一篇文章,小乐给大家带来了Java8新特性之Optional,接下来本文将会给大家介绍Java8新特性之Date API
前言:
Java 8通过发布新的Date-Time API来进一步加强对日期与时间的处理。 旧版的 Java 中,日期时间 API 存在诸多问题 :
非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,
设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。
时区处理麻烦 − 日期类并不提供国际化,没有时区支持
Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:
Local(本地) : 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过制定的时区处理日期时间。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
1、LocalDateTime


LocalDateTime ldt = LocalDateTime.now();
// 获取系统当前时间
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000);
// 构建LocalDateTime对象ldt
System.out.println(ldt2);
// 获取明年此时的时间
LocalDateTime ldt3 = ldt.plusYears(1);
System.out.println(ldt3);
// 获取去年此刻时间
LocalDateTime ldt4 = ldt.minusYears(1);
System.out.println(ldt4);
// 获取年
System.out.println(ldt.getYear());
// 获取月份
System.out.println(ldt.getMonthValue());
// 获取本月第某天
System.out.println(ldt.getDayOfMonth());
// 获取时
System.out.println(ldt.getHour());
// 获取分
System.out.println(ldt.getMinute());
// 获取秒
System.out.println(ldt.getSecond());
// 获取纳秒
System.out.println(ldt.getNano());
2、时间戳
时间戳:以Unix元年:1970年1月1日 00:00:00 至目前时间之间的毫秒值
public static void testInstant(){
// 时间戳 Instant
Instant ins1 = Instant.now();
// 默认获取UTC时间,协调世界时
System.out.println(ins1);
OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);
System.out.println(ins1.toEpochMilli());
Instant ins2 = Instant.ofEpochSecond(60);
System.out.println(ins2);
}
3、日期时间间隔计算:Duration、Period
public static void testDuration(String[] args) {
Instant ins1 = Instant.now();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Instant ins2 = Instant.now();
Duration dura = Duration.between(ins1, ins2);
System.out.println(dura.toMillis());
System.out.println("----------------------");
LocalTime lt1 = LocalTime.now();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LocalTime lt2 = LocalTime.now();
Duration dura2 = Duration.between(lt1, lt2);
System.out.println(dura2.toMillis());
}
public static void testPeriod(){
LocalDate ld1 = LocalDate.of(2015, 2, 2);
LocalDate ld2 = LocalDate.now();
Period period = Period.between(ld1, ld2);
System.out.println(period);
System.out.println("相差" + period.getYears() + "年"
+ period.getMonths() + "月"
+ period.getDays() + "天");
}
4、时间校正:TemporalAdjuster
public static void testTemporalAdjuster(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
LocalDateTime ldt2 = ldt.withDayOfMonth(10);
System.out.println(ldt2);
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
System.out.println(ldt3);
}
5、日期时间格式化
public static void testDateFormate(){
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDateTime ldt = LocalDateTime.now();
String strDate = ldt.format(dtf);
System.out.println(strDate);
System.out.println("----------------------------");
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String strDate2 = dtf2.format(ldt);
System.out.println(strDate2);
System.out.println("-----------------------------");
LocalDateTime newDate = ldt.parse(strDate2, dtf2);
System.out.println(newDate);
}
6、TimeZone 时区处理
// 时区的处理
public static void testTimeZone(){
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Europe/Dublin"));
System.out.println(zdt);
}
这次就分享到这里了,后面小乐会继续给大家介绍Java8新特性的,请大家继续多多关注哦!乐字节只讲Java技术干货。
乐字节-Java8新特性之Date API的更多相关文章
- 乐字节-Java8新特性之Base64和重复注解与类型注解
上一篇小乐给大家说了<乐字节-Java8新特性之Date API>,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解. 一.Base64 在Java 8中,内置 ...
- 乐字节-Java8新特性-接口默认方法
总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...
- 乐字节-Java8新特性-接口默认方法之Stream流(下)
接上一篇:<Java8新特性之stream>,下面继续接着讲Stream 5.流的中间操作 常见的流的中间操作,归为以下三大类:筛选和切片流操作.元素映射操作.元素排序操作: 操作 描述 ...
- 乐字节-Java8新特性之方法引用
上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...
- 乐字节-Java8新特性之Stream流(上)
上一篇文章,小乐给大家介绍了<Java8新特性之方法引用>,下面接下来小乐将会给大家介绍Java8新特性之Stream,称之为流,本篇文章为上半部分. 1.什么是流? Java Se中对于 ...
- 乐字节-Java8新特性之Optional
上一篇小乐带大家了解了Java新特性之Stream,接下来将会继续述说Java新特性之Optional Optional<T>类(java.util.Optional)是一个容器类,代表一 ...
- 乐字节-Java8新特性之函数式接口
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- Java8 新特性 Data Time API
Java8新的日期类型 在Java8以前,Date日期API对我们非常的不友好,它无法表示日期,只能以毫秒的精试来表示时间,并且可以修改,他的线程还不是安全的.所以Java8中引入了全新的日期和时间A ...
随机推荐
- Struts2下载及简介
Struts2下载及简介 一.Struts2下载: 进入网址:http://struts.apache.org/download.cgi#struts23163 可以下载最新的Struts2. 1.F ...
- CUDA-存储器
1.类型(8种) register: GPU片内 device可读\写 shared memory:GPU片内 device可读\写 local memory:板载显存 device可读\写 cons ...
- 【转】vim 命令
Vim命令合集 建议直接看原文:(排版有些乱) 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接 ...
- 背水一战 Windows 10 (79) - 自定义控件: Layout 系统, 控件模板, 事件处理
[源码下载] 背水一战 Windows 10 (79) - 自定义控件: Layout 系统, 控件模板, 事件处理 作者:webabcd 介绍背水一战 Windows 10 之 控件(自定义控件) ...
- LOJ#6387 「THUPC2018」绿绿与串串 / String (Manacher || hash+二分)
题目描述 绿绿和 Yazid 是好朋友.他们在一起做串串游戏. 我们定义翻转的操作:把一个串以最后一个字符作对称轴进行翻转复制.形式化地描述就是,如果他翻转的串为 RRR,那么他会将前 ∣R∣−1个字 ...
- ElasticSearch权威指南学习(文档)
什么是文档 在Elasticsearch中,文档(document)这个术语有着特殊含义.它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasti ...
- ORACLE更新数据时如果有就更新没有就插入
SQL写法: begin update table_name set salary = 10000 where emp_id = 5; if sql%notfound then insert into ...
- 惊艳,Dubbo域名已改,也不再局限于Java!
今天作者想去 Dubbo 官网查下相关资料,发现官方域名由 dubbo.io 直接跳转至 dubbo.apache.org 下了,然后突然回想起 Dubbo 已经在 2 月份正式进入了 Apache ...
- Ubuntu16.04安装Anaconda (转)
一. Anaconda下载 Anaconda 官方下载链接: https://www.continuum.io/downloads 根据自己的系统选择下载32位还是64位. 二. 进入下载目录 如 ...
- 关于appendChild和insertBefore appendTo()和append
appendChild和insertBefore(原生js) appendTo()和append(jquery)