廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime
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的更多相关文章
- 廖雪峰Java7处理日期和时间-3java.time的API-2ZonedDateTime
ZonedDatetime = LocalDateTime + ZoneId ZonedDateTime:带时区的日期和时间 ZoneId:新的API定义的时区对象(取代几句的java.util.Ti ...
- 廖雪峰Java7处理日期和时间-4最佳实践-最佳实践
jdk提供了2套新旧的API来处理日期和时间. java.util * Date * Calendar java.time(JDK>=1.8) * Localdate * LocalTime * ...
- 廖雪峰Java7处理日期和时间-2Data和Calendar-1Date
计算机中如何存储和表示日期和时间 Epoch Time:从1970年1月1日零点(格林威治时区/GMT+00:00)到现在经历的秒数,也叫timestamp, 例如: 秒级: * 北京 2016-11 ...
- 廖雪峰Java7处理日期和时间-1概念-1日期和时间
1.日期 日期是指某一天,如2016-11-20,2018-1-1 2.时间有2种: 不带日期的时间:14:23:54 带日期的时间:2017-1-1 20:21:23,唯一确定某个时刻 3.时区 时 ...
- 廖雪峰Java7处理日期和时间-2Data和Calendar-2Calendar
Calendar类 历史上有许多纪年方法,其差异太大了.为了统一计时,通常采用格里高利日历. 1.创建Calendar对象 Calenda类是一个抽象类,所以不能使用构造器来创建Calendar对象. ...
- Java 中的日期与时间
Java 日期时间 标签 : Java基础 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含 ...
- 廖雪峰Python电子书总结
函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...
- git常用命令总结--廖雪峰老师Git教程命令总结
学习了廖雪峰老师的Git教程之后的命令总结,重点关于git和远程仓库的东西. 如果没有学过,这是传送门 下面这个图很重要 一.git初始化本地仓库和配置 echo "想输入到文件的内容,一般 ...
- 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理
学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...
随机推荐
- Angular/Vue调用百度地图+标注点不显示图标+多标注点计算地图中心位置
整理一下~ 一.在vue中调用百度地图 首先当然是申请百度密匙(很简单,不多说) 1.在index.html文件中引入百度地图JavaScript API接口: <script type=& ...
- sql server替换字段中的某个字符
USE [Vocabulary ] GO --UPDATE [dbo].[table name] -- SET [en] = '' -- ,[cn] ='' -- WHERE --cha ...
- idea中springboot项目程序入口右键不显示run as的原因
今天在idea中导入了springboot的项目,但是在程序的入口处右键单击没有出现run as 的程序启动方式,主要原因在于idea中右面的maven projects中没加载项目,需要点击“+“ ...
- gcc4.9.1新特性
C family Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=a ...
- Ubuntu18.04 搭建zookeeper单机版集群
一台电脑启动三个虚拟机比较折腾,这里就用一台虚拟机模拟一下zk集群. 1.后台下载安装包到 /opt目录 sudo wget -b http://archive.apache.org/dist/zoo ...
- flashfxp 数据socket错误 连接已超时 filezilla
最近windows server 开启了防火墙后发现flashfxp连不上,报超时. 1,服务端的动态端口从指定的范围内取, 2,防火墙开启范围内端口. 参考:http://jingyan.baidu ...
- 解决ios兼容性问题
其实也不算兼容性问题 在做一个手指切换动画时,在安卓显示正常但是在iOS上切换图片时整个页面会向上或向下窜,这样非常印象美观,这种现象是由于ios自带的下拉刷新功能能影响的: 解决方法: 添加阻止事件 ...
- 剑指offer题库
1.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 因为矩阵的 ...
- MFC无闪烁隐藏窗口
今天需要用到将窗口的程序隐藏,但是如果在OnInitDialog()中,直接写: ShowWindow(SW_HIDE); 是无效的,因为这本身就是个初始化窗口函数.也就是说,窗口在并没有显示出来的时 ...
- Python pip源更改
将pip源设置为阿里源 windows 打开文件资源管理器(文件夹地址中) 地址栏上面输入 %appdata% 在这里面新建一个文件夹pip 在pip文件夹里面新建一个文件叫做 pip.ini,内容如 ...