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. RobotFramework--环境安装1

    1.RobotFramework RobotFramework 的架构是一个通用型的验收测试和验收测试驱动开发的自动化测试框架(ATDD).它 具有易于使用的表格来组织测试过程和测试数据. 3.1版本 ...

  2. Wincc用户登录VBS脚本

    在Wincc中为防止未知用户的误操作,在操作性按钮以及图符等设备操作面板,在组流程图时,需设置用户权限,只有符合权限的用户才可以进行操作.所以在流程图界面需设置系统用户登录界面.登录操作可以选择按钮或 ...

  3. jquery 获取表单的内容以JSON对象形式返回

    添加一个serializeJson方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  4. jQueryValidate的表单提交ajax刷新代码

    $("#form-member-add").validate({ rules:{ username:{ required:true, minlength:2, maxlength: ...

  5. Java--- Ajax异步验证用户名是否存在

    今天复习了一下  Ajax异步验证用户名是否存在,在下面我写三种,一般开发时候都用第三种 jQuery和Ajax结合的形式,下面就介绍三种,具体说明代码里就有啦,废话不多说,直接上代码: 第一种方式: ...

  6. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

  7. JavaScript 设计模式的七大原则(未完成)

    设计模式(面向对象)有七大设计原则,分别是: 开闭原则:对扩展开放,对修改关闭 单一职责原则:每一个类应该专注于做一件事情 里氏替换原则:父类存在的地方,子类是可以替换的 依赖倒转原则:实现尽量依赖抽 ...

  8. Django安装遇到的问题

    因为mac一般自带的有python解释器,如果重新安装了新的解释器,并且想默认使用的话,需要配置一下环境变量. 在使用python解释器的时候,可以用命令:which python 来确定当前使用的时 ...

  9. wpf-x命名空间-Markup Extension(标记扩展)

    1.x:type 用于前端类型声明 与C#  代码 Type类似 2.x:Null 代表Null 某些时候需要显示的为一些值设置为空   前端为 x:Null   C# 中 为 Null 3.x:ar ...

  10. 剑指Offer 52. 正则表达式匹配 (字符串)

    题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...