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. Elasticsearch5.5通过案例学习简单操作

    1. 建立员工目录 ES数据库对象与关系型数据库对象对比 Relational DB -> Databases -> Tables -> Rows -> ColumnsElas ...

  2. mongoose手动生成ObjectId

    用mongoose驱动保存数据,如果_id没有定义,那么在save的时候,mongoose驱动会自己生成一个_id.那么如果需要手动生成可以用mongoose.Types.ObjectId()方法. ...

  3. Java JRT

    解释器 运行步骤: 找到环境变量CLASSPATH,CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录 从根目录开始,解释器获取包名并将每个.替换成\或/(取决于操作系统) 得到 ...

  4. MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    本文主要讲述如何安装 C语言 编译器——MinGW-w64,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用. 编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他 ...

  5. python全栈开发笔记---------数据类型-----集合set

    定义:由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key 1.不同元素组成 2.无序 3.集合中元素必须是不可变类型(数字,字符串,元组) 特性:集合的目的是讲不同的值放到 ...

  6. 【转】python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)

    二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数据进行快速运算的标准 ...

  7. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。

    package com.lanxi.demo2; import java.util.HashSet; import java.util.Iterator; import java.util.Set; ...

  8. 一十九条优雅Python编程技巧

    1.交换赋值 #不推荐 temp = a a = b b = a #推荐 a , b = b , a #先生成一个元组(tuple)对象,然后在unpack 2.Unpacking #不推荐 l = ...

  9. Linq分组查询统计

    这里介绍Linq使用Group By和Count得到每个CategoryID中产品的数量,Linq使用Group By和Count得到每个CategoryID中断货产品的数量等方面. 学经常会遇到Li ...

  10. Socket基础之-启动异步服务侦听

    Socket网络编程第一篇: 本文主要是以代码为主. .NET技术交流群 199281001 .欢迎加入 1 //负责监听的套接字 private Socket socketServer; //通知一 ...