Java 8 新日期时间 API

1. LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime 实例是不可变的对象,分别表示使用 ISO-8601 日历系统的日期、时间、日期时间。它们提供简单的日期或时间,并不包含当前的时间信息。与不包含与时区相关的信息。

public void test1(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt); LocalDateTime ld2 = LocalDateTime.of(2016, 11, 21, 10, 10, 10);
System.out.println(ld2); LocalDateTime ldt3 = ld2.plusYears(20);
System.out.println(ldt3); LocalDateTime ldt4 = ld2.minusMonths(2);
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());
}

2. Instant(时间戳)

使用 Unix 元年 1970年1月1日 00:00:00 所经历的毫秒值。

public void test2(){
Instant ins = Instant.now(); //默认使用 UTC 时区
System.out.println(ins); OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt); System.out.println(ins.getNano()); Instant ins2 = Instant.ofEpochSecond(5);
System.out.println(ins2);
}

3. Duration 和 Period

  • Duration : 用于计算两个时间间隔
  • Period : 用于计算两个日期间隔
public void test3() throws InterruptedException {
Instant ins1 = Instant.now();
Thread.sleep(1000);
Instant ins2 = Instant.now();
System.out.println("所耗费时间为:" + Duration.between(ins1, ins2)); System.out.println("----------------------------------"); LocalDate ld1 = LocalDate.now();
LocalDate ld2 = LocalDate.of(2011, 1, 1); Period pe = Period.between(ld2, ld1);
System.out.println(pe.getYears());
System.out.println(pe.getMonths());
System.out.println(pe.getDays());
}

4. 时间校正器

  • TemporalAdjuster 时间校正器。有时我们可能需要获例如:将日期调整到 "下个周日" 等操作。

  • TemporalAdjusters 该类通过静态方法提供了大量的常用 TemporalAdjuster 的实现。

public void test4(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt); LocalDateTime ldt2 = ldt.withDayOfMonth(10);
System.out.println(ldt2); LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(ldt3); //自定义:下一个工作日
LocalDateTime ldt5 = ldt.with((l) -> {
LocalDateTime ldt4 = (LocalDateTime) l; DayOfWeek dow = ldt4.getDayOfWeek(); if(dow.equals(DayOfWeek.FRIDAY)) {
return ldt4.plusDays(3);
} else if(dow.equals(DayOfWeek.SATURDAY)) {
return ldt4.plusDays(2);
} else{
return ldt4.plusDays(1);
}
}); System.out.println(ldt5);
}

5. DateTimeFormatter(解析和格式化日期或时间)

public void test5(){
DateTimeFormatter dtf; //dtf = DateTimeFormatter.ISO_LOCAL_DATE;
dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E"); LocalDateTime ldt = LocalDateTime.now();
String strDate = ldt.format(dtf); System.out.println(strDate); LocalDateTime newLdt = ldt.parse(strDate, dtf);
System.out.println(newLdt);
}

6. ZonedDate、ZonedTime、ZonedDateTime(带时区的时间或日期)

Java 8 中加入了对时区的支持,带日时区的时间为分别为 ZonedDate、ZonedTime、ZonedDateTime 其中每个时区都对应着 ID,地区 ID 都为 "{区域/(城市}" 的格式,例如:Asia/Shanghai

// 所有支持的时区
public void test6(){
Set<String> set = ZoneId.getAvailableZoneIds();
set.forEach(System.out::println);
} public void test7(){
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(ldt); ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("US/Pacific"));
System.out.println(zdt);
}

Java 8 新特性

  1. Java 8 Lambda 表达式
  2. Java 8 Stream API
  3. Java 8 Optional 类深度解析
  4. Java 8 新时间日期 API
  5. Java 8 接口中的默认方法与静态方法
  6. Java 8 可重复注解与类型注解

Java 8 新日期时间 API的更多相关文章

  1. JDK8中新日期时间API

    它们面临的问题是:可变性:像日期和时间这样的类应该是不可变的.偏移性:Date中的年份是从1900开始的,而月份都从0开始.格式化:格式化只对Date有用,Calendar则不行.此外,它们也不是线程 ...

  2. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

  3. 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API

    https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...

  4. Java 8 日期时间 API

    转自:https://www.runoob.com/java/java8-datetime-api.html Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与 ...

  5. java 数据结构(三):java常用类 三 日期时间API

    JDK 8之前日期时间API 1.获取系统当前时间:System类中的currentTimeMillis()long time = System.currentTimeMillis();//返回当前时 ...

  6. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

  7. Java 8 新的时间日期 API

    1. 概述 1.1 简介 Java 8 引入了一套全新的时间日期API,操作起来更简便.简单介绍下,LocalDate和LocalTime和LocalDateTime的使用: java.util.Da ...

  8. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  9. Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等

    从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转D ...

随机推荐

  1. 常用数据库2 sqlite及SQL注入

    知识内容: 1.sqlite数据库介绍 2.sqlite数据库操作 3.SQL注入 一.sqlite数据库介绍 1.sqlite数据库 sqlite数据库:轻量级的数据库,一般开发中使用sqlite数 ...

  2. 支持向量机(理论+opencv实现)

    从基础开始讲起,没有这些东西看支持向量机真的很难!   1.拉格朗日乘子(Lagrangemultiplier)   假设需要求极值的目标函数(objectivefunction)为f(x,y),限制 ...

  3. vi规范

    pep8规范 # vi规范## , 后空一格# 函数和其他代码空两行

  4. Static / Const 的概念

    C/C++/Java Static / Const 的概念 这里以C为准,其他语言类似. Static变量是指分配不变(只可分配一次,以后再分配就无效了.)的变量 -- 它的存活寿命或伸展域可以贯穿程 ...

  5. windows,linux,esxi系统判断当前主机是物理机还是虚拟机?查询主机序列号命令

    参考网站:https://blog.csdn.net/yangzhenping/article/details/49996765 查序列号: http://www.bubuko.com/infodet ...

  6. session失效刷新后登录页面嵌入在iframe中的前台解决办法

    在前台登录页面中加入JS代码,判断登录页面是否在iframe中,在iframe中就跳转出去 例: //判断是否在iframe中,在里面就跳出去 if (top.location.href != loc ...

  7. WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/

    为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...

  8. js中使用cookie

    function setcookie(name, value, expires, path, domain, secure) { var cookieText = encodeURIComponent ...

  9. gevent 实现单线程下的socket链接

    通过gevent实现socket的多并发 server 端: import geventfrom gevent import socket, monkey monkey.patch_all() #进行 ...

  10. insert NULL into mysql

    https://stackoverflow.com/questions/36898130/python-how-to-insert-null-mysql-values You are insertin ...