1.java.time提供了新的日期和时间API:

  • LocalDate/LocalTime/LocalDateTime
  • ZoneDateTime/ZoneId
  • Instant
  • Formatter

新API特点:

  • 严格区分日期、时间
  • 所有的类均为不变类(类似String)
  • 修复了Month范围1-12(Jan~Dec)
  • Week范围1-7(Mon~Sun)

2.LocalDate/LocalTime/LocalDateTime

  • LocalDate:本地日期
  • LocalTime:本地时间
  • LocalDateTime:本地日期+时间
    public static void main(String[] args) {
//获取当前日期时间
LocalDate d = LocalDate.now();//获取当前日期
LocalTime t = LocalTime.now();//当去当前时间
LocalDateTime dt = LocalDateTime.now();//获取当前日期和时间
//Local严格按照ISO 8601格式打印
System.out.println(d+"\t"+t+"\t"+dt); //指定日期时间
LocalDate d2 = LocalDate.of(2016,11,30);//构造LocalDate对象,月份不再减1,即11是11月,不是12月
LocalTime t2 = LocalTime.of(15,16,17);//构造LocalTime对象
LocalDateTime dt2 = LocalDateTime.of(2016,11,30,15,16,17);//构造LocalDateTime对象
LocalDateTime dt3 = LocalDateTime.of(d2,t2);//根据LocalDate和LocalTime对象构造LocalDateTime对象
System.out.println(d2+"\t"+t2+"\t\t"+dt2);
}

2.1DateTimeFormatter是不可变类

    public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dtf.format(LocalDateTime.now()));
System.out.println(LocalDateTime.now().format(dtf)); LocalDateTime dt2 = LocalDateTime.parse("2019-04-11 19:27:18",dtf);
System.out.println(dt2);
}


## 3.parse将字符串解析为日期时间
默认是按照ISO标准格式进行解析的。如果传入的标准格式的日期、时间,可以自动解析。
* yyyy-MM-dd
* HH:mm:ss
* HH:mm:ss:SSS
* yyyy-MM-dd'T'HH:mm:ss
* yyyy-MM-dd'T'HH:mm:ss.SSS
```#java
public static void main(String[] args) {
LocalDate d1 = LocalDate.parse("2001-05-06");
System.out.println(d1);
LocalTime t1 = LocalTime.parse("15:16:17");
System.out.println(t1);
LocalTime t2 = LocalTime.parse("15:16:17.99");
System.out.println(t2);
LocalDateTime dt1 = LocalDateTime.parse("2016-11-30T15:16:17");
System.out.println(dt1);
LocalDateTime dt2 = LocalDateTime.parse("2016-11-30T15:16:17.333");
System.out.println(dt2);
}
```

## 4.日期和时间运算
### 4.1对日期和时间进行加减
* plusDays()
* minusHours()
* plusWeeks()
```#java
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate after5days = today.plusDays(5);//加5天
System.out.println(today+"\t"+after5days);

    LocalTime now = LocalTime.now();
LocalTime before2hours = now.minusHours(2);//减2小时
System.out.println(now+"\t"+before2hours); LocalDate d = today.plusYears(1).plusMonths(1).plusWeeks(1).plusDays(1);//1年1月1周又1天后
System.out.println(today+"\t"+d);
}
<img src="https://img2018.cnblogs.com/blog/1418970/201904/1418970-20190411195716696-371876859.png" width="500" />
### 4.2使用with调整日期时间
* withDayOfMonth()
* withMonth()
* withHours()
* with()
```#java
LocalDate firstday = LocalDate.now().withDayOfMonth(1);//本月第一天
System.out.println(firstday);
LocalTime at = LocalTime.now().withSecond(0).withNano(0);//将秒和纳秒调整为0
System.out.println(at);
LocalDate lastday = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());//本月最后1天
System.out.println(lastday);
LocalDate firstSunday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.SUNDAY));//本月第一个周日
System.out.println(firstday);
}


### 4.3判断日期和时间先后
* isBefore()
* isAfter()
* equals()
```#java
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2016,11,20);
LocalDate d2 = LocalDate.of(2016,11,21);
System.out.println(d1.isBefore(d2));
System.out.println(d1.isAfter(d2));
System.out.println(d1.equals(d2));
}
```

### 4.4Period计算2个时期相差多少
* getYears()
* getMonths()
* getDays()
```#java
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2016,11,20);
LocalDate d2 = LocalDate.of(2050,1,1);
Period p = d1.until(d2);
System.out.println(p);//P33Y1M12D ,即相差33年1月12天
System.out.println("年"+p.getYears()+"月"+p.getMonths()+"日"+p.getDays());
System.out.println((d2.toEpochDay()-d1.toEpochDay())+"天");
}
```

示例:

代码1:

    public static void main(String[] args) {
LocalDate d1 = LocalDate.now();
System.out.println(d1);
System.out.println("week="+d1.getDayOfWeek().getValue());//打印周几
LocalDate d2 = LocalDate.of(2016,11,30);
LocalTime t2 = LocalTime.of(15,16,17);
LocalDateTime dt2 = LocalDateTime.of(d2,t2);
System.out.println(dt2);
}

<img src="https://img2018.cnblogs.com/blog/1418970/201904/1418970-20190411204616903-1288634477.png="500" />

5.总结:

LocalDate、LocalTime和LocalDateTime:

  • 不变类(类似String)
  • 默认按ISO 8601标准格式化和解析
  • 使用DateTimeFormatter自定义格式化和解析
  • 使用plusDays()/minusHours()等方法对日期和时间进行加减、返回新对象
  • 使用withDayOfMonth()/with()等方法调整日期和时间,返回新对象
  • 使用isBefore()/isAfter()/equals()判断日期和时间的先后

注意:LocalDateTime无法与long进行转换:

  • 因为LocalDateTime没有时区,无法确定某一时刻
  • ZonedDateTime有时区,可以与long进行转换

廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime的更多相关文章

  1. 廖雪峰Java7处理日期和时间-3java.time的API-2ZonedDateTime

    ZonedDatetime = LocalDateTime + ZoneId ZonedDateTime:带时区的日期和时间 ZoneId:新的API定义的时区对象(取代几句的java.util.Ti ...

  2. 廖雪峰Java7处理日期和时间-4最佳实践-最佳实践

    jdk提供了2套新旧的API来处理日期和时间. java.util * Date * Calendar java.time(JDK>=1.8) * Localdate * LocalTime * ...

  3. 廖雪峰Java7处理日期和时间-2Data和Calendar-1Date

    计算机中如何存储和表示日期和时间 Epoch Time:从1970年1月1日零点(格林威治时区/GMT+00:00)到现在经历的秒数,也叫timestamp, 例如: 秒级: * 北京 2016-11 ...

  4. 廖雪峰Java7处理日期和时间-1概念-1日期和时间

    1.日期 日期是指某一天,如2016-11-20,2018-1-1 2.时间有2种: 不带日期的时间:14:23:54 带日期的时间:2017-1-1 20:21:23,唯一确定某个时刻 3.时区 时 ...

  5. 廖雪峰Java7处理日期和时间-2Data和Calendar-2Calendar

    Calendar类 历史上有许多纪年方法,其差异太大了.为了统一计时,通常采用格里高利日历. 1.创建Calendar对象 Calenda类是一个抽象类,所以不能使用构造器来创建Calendar对象. ...

  6. Java 中的日期与时间

    Java 日期时间 标签 : Java基础 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含 ...

  7. 廖雪峰Python电子书总结

    函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...

  8. git常用命令总结--廖雪峰老师Git教程命令总结

    学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般 ...

  9. 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理

    学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...

随机推荐

  1. Spring cloud系列之Zuul配置项中sensitiveHeaders和ignoredHeaders

    sensitiveHeaders:会过滤客户端请求中的和该配置项匹配的headers比如: zuul: sensitiveHeaders: X-ABC 如果客户端在发请求是带了X-ABC,那么X-AB ...

  2. python中的模块调用

    1.简介 在python中经常需要各模块相互调用,此时会出现以下几种情况: (1)同一目录下文件的调用 (2)父目录调用子目录中的文件 (3)同级目录下文件的调用 2.示例 现有该目录结构:AB中有A ...

  3. Windows IIS服务挂载NAS共享文件存储

    本文介绍如何结合阿里云NAS的SMB协议支持和ECS Windows虚拟机,使用Windows内置的互联网信息服务(IIS)来提供Web和FTP服务. 阿里云文件存储服务NAS主要面向阿里云ECS 实 ...

  4. .net反编译的九款神器

    本人搜集了下8款非常不错的.Net反编译利器: 1.Reflector Reflector是最为流行的.Net反编译工具.Reflector是由微软员工Lutz Roeder编写的免费程序.Refle ...

  5. SpringCloud使用Feign实现服务间通信

    SpringCloud的服务间通信主要有两种办法,一种是使用Spring自带的RestTemplate,另一种是使用Feign,这里主要介绍后者的通信方式. 整个实例一共用到了四个项目,一个Eurek ...

  6. c、c++函数随机

    #inlcude<algorithm> next_permutation函数<全排列函数> #include<stdio.h> #include<algori ...

  7. Kerberos主从配置文档

    Kerberos主从配置文档   1. Kerberos主从同步机制 在Master上通过以下命令同步数据: kdb5_util dump /var/kerberos/krb5kdc/slave_db ...

  8. ubuntu 16.04 编译安装 trl8291cu系列 无线网卡驱动

    1 先 下载git包 和相关编译工具 sudo apt-get update sudo apt-get install git linux-headers-generic build-essentia ...

  9. ui自动化:python+appium----环境搭建

    前言: appium可以说是app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本支持java和python.以下为python+appium的安装教程... 环境准备... ...

  10. 2017年3月28日15:59:16 终于明白spring这套鬼东西是怎么玩的了

    先说重点,新东家公司的项目框架没有一样是我之前用过的,首先pm和我说的是一套微服务的概念,微服务不同于传统的功能模块实现,他将服务松散化分不到各个系统之间,这样也是实现分散压力的一种. 微服务是由sp ...