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. python----操作文本文件

    一.文本文件基本操作 1.1 打开文本文件,得到文件句柄并赋值给一个变量 f = open('test', 'r', encoding='utf-8') # 默认打开模式为r 文件路径:相对路径.绝对 ...

  2. html5(三)

    body{ text-align:center;} #mainbox { display:block; width:500px; margin:50px auto; padding:15px; tex ...

  3. learning makefile .PHONY

  4. 手机端网页技术--使自己做的asp.net网页适应手机浏览

    使自己做的asp.net网页适应手机浏览 特别提醒: 对于文本框和其他控件,无法自适应,只有纯粹的文本和table的单元格可以自适应,其他的只有设置为具体的宽度,或者在一个表格中(本来在电脑中显示一行 ...

  5. 超恶心的TP模版取值

    一.JS事件中 在使用H-uiAdmin做后台开发的时候,碰到了使用元素点击触发js函数展示弹窗的写法 但是在js函数中还需要使用U函数生成url以及使用$vo.id来传值 反复试了一下模版标签的写法 ...

  6. python的出生

    1.语言的种类 机器语言------>汇编语言------>高级语言 高级语言按转换方式分为两类: 解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器 ...

  7. Linux内核分析--理解进程调度时机、跟踪分析进程调度和进程切换的过程

    ID:fuchen1994 姓名:江军 作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否 ...

  8. 深入剖析Java中的装箱和拆箱(缓存池技术)

    以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 简单一点说,装箱就是  自动将基本数据类型转换为包装器类型:拆箱就是  自动将包装器类型转换为基本数据类型. 二.装箱和拆箱是如何实现的 1:反编 ...

  9. mysql一些常用配置

    清空表: truncate table 表名 让id重1开始 alter table `test` auto_increment=1

  10. 2. Net、ASP.Net、C#、VisualStudio之间的关系

    .Net一般指的是.NetFramework 是一个开发和运行环境,是框架, 提供了基础的.Net类.这些类可以被任何一种.Net编程语言调用,.NetFramework还提供了CLR,JIT,GC等 ...