廖雪峰Java7处理日期和时间-3java.time的API-2ZonedDateTime
ZonedDatetime = LocalDateTime + ZoneId
ZonedDateTime:带时区的日期和时间
ZoneId:新的API定义的时区对象(取代几句的java.util.TimeZone)
Instant:时刻对象(epoch seconds)
1.ZonedDateTime对象为携带时区的日期时间
- now()
- getZone()
public static void main(String[] args) {
ZonedDateTime zbj = ZonedDateTime.now();
System.out.println("当前时区的日期和时间:\t\t"+zbj);
ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println("纽约时区的当前时间和日期:\t"+zny);
}
## 2.添加时区LocalDateTime->ZonedDateTime
atZone()只是为日期时间添加时区,只是时区不一样
```#java
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.of(2016,11,30,15,16,17);
ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());
System.out.println("当前时区的日期和时间:\t\t"+bj);
ZonedDateTime ny = ldt.atZone(ZoneId.of("America/New_York"));
System.out.println("纽约时区的当前时间和日期:\t"+ny);
}
```
## 3.时区转换
withZoneSameInstant()将某一时区的时刻转换为目标时区的时刻
```#java
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.of(2016,11,30,15,16,17);
ZonedDateTime bj = ldt.atZone(ZoneId.systemDefault());
System.out.println("当前时区的日期和时间:\t\t"+bj);
ZonedDateTime ny = bj.withZoneSameInstant(ZoneId.of("America/New_York"));
System.out.println("纽约时区的当前时间和日期:\t"+ny);
}
```
## 4.Instant对象表示时刻
获取Instant对象:
* 使用Instant获取,如Instant.now(),Instant.ofEpochMilli()...
* 通过ZonedDateTime对象获取,如ZonedDateTime.now().toInstant()
* 获取epoch time,Instant.getEpochSecond()
```#java
public static void main(String[] args) {
Instant ins = Instant.now();
System.out.println(ins);
Instant ins2 = ZonedDateTime.now().toInstant();//ZonedDateTime对象通过toInstant就可以转化为Instant对象
System.out.println(ins2);
ZonedDateTime zdt = ins.atZone(ZoneId.of("Z"));//Instant对象通过atZone就可以转换为ZonedDateTime对象
System.out.println(zdt);//将Instant对象转换为ZonedDateTime对象,打印结果同Instant对象
long epoch = ins.getEpochSecond();//通过getEpochSecond()返回一个long类型的整形
System.out.println(epoch);
ZonedDateTime zdt2 = ZonedDateTime.now();
System.out.println(zdt2);
}
```
## 5.Instant、ZonedDateTime、long的互相转换
```#java
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now();
//ZonedDateTime <-> Instant
Instant ins1 = zdt.toInstant();
ZonedDateTime zdt1 = ins1.atZone(ZoneId.systemDefault());
//Instant <-> long
long l1 = ins1.toEpochMilli();
Instant ins2 = Instant.ofEpochMilli(l1);
//long <-> ZonedDateTime
long l2 = ZonedDateTime.now().toEpochSecond();
ZonedDateTime zdt2 = Instant.ofEpochMilli(l2).atZone(ZoneId.systemDefault());
System.out.println(zdt1+"\t"+ins1+"\t"+l1+"毫秒");
System.out.println(zdt2+"\t"+ins2+"\t"+l2+"秒");
}
<img src="https://img2018.cnblogs.com/blog/1418970/201904/1418970-20190412195835705-242422631.png" width="500" />
## 6.TemporalAmount
表示一段时间:1天/2小时/30分钟,有两个子类:
* Duration:Days Hours Minutes Seconds Mills Nanos
* Peroid:Day Month Week Year
可以加减一个TemporalAmount对象
* plus(TemporalAmount)
* minus(TemporalAmount)
```#java
public static void main(String[] args) {
Period towDays = Period.ofDays(2);
Duration oneHour = Duration.ofHours(1);
Duration fiveMin = Duration.ofMinutes(5);
ZonedDateTime zdt = ZonedDateTime.now().minus(towDays).plus(oneHour).plus(fiveMin);
System.out.println(ZonedDateTime.now());
System.out.println(zdt);
}
7.java.time提供的其他Class
- ZoneOffset
- OffsetDateTime
- OffsetTime
- ChronoLocalDate/ChronoLocalDateTime:用于实现其他历法
8.总结:
- ZonedDateTime就是LocalDateTime关联ZoneId
- ZonedDateTime可以做时区转换,注意不要自己试图通过加减时区偏移量计算。因为时区的转换不仅设计到夏令时,还包括历史夏令时的改动。
- ZoneId表示时区
- Instant表示时刻(内部用long表示epoch second)
- ZonedDateTime、Instant、Long可以相互转换
廖雪峰Java7处理日期和时间-3java.time的API-2ZonedDateTime的更多相关文章
- 廖雪峰Java7处理日期和时间-3java.time的API-1LocalDateTime
1.java.time提供了新的日期和时间API: LocalDate/LocalTime/LocalDateTime ZoneDateTime/ZoneId Instant Formatter 新A ...
- 廖雪峰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 期末总 ...
随机推荐
- window.localStorag使用
H5本地缓存: 删除: window.localStorage.removeItem("parentNode") 写入: window.localStorage.setItem(& ...
- Saiku更改源代码实现默认查询一天的数据(十)
Saiku通过更改源代码实现默认查询前一天数据 saiku在本地进行的编译的方式前面已有教程说明,接下来就是更改原代码了 (从网上学得教程,目前只了解到获取最新一天的数据信息) 参考博客地址: htt ...
- 【Java集合系列三】Vector-Stack解析
2017-07-29 12:59:14 一.简介 1.Vector继承关系 2.Vector类扩容 Vector类的实现和ArrayList极其相似,都使用数组存储元素,但是扩容策略不一样,Array ...
- 对python的super方法的用法理解
参考链接:https://www.cnblogs.com/dkblog/archive/2011/02/24/1980654.html https://www.cnblogs.com/wjx1/p/5 ...
- spring+springMvc+struts的SSH框架整合
1.建立一个web项目 2.导入SSH框架所需jar包 3.配置web.xml文件 <?xml version="1.0" encoding="UTF-8" ...
- C++ 抽象类与接口
1. 抽象类 在面向对象编程中,抽象类是一种只能定义类型,不能生成对象的类,它是对一系列看上去不同,但是本质相同的具体概念的抽象.最典型的的抽象类就是”图形”,三角形.矩形.梯形都是图形,它们都具有 ...
- python异常处理机制
python有五种异常处理机制,分别是 1.默认异常处理器. 如果我们没有对异常进行任何预防,那么程序在执行过程中发生异常就会中断程序,调用python默认的异常处理器,并在终端输出异常信息,如图所示 ...
- 创建Car类,包含name,price属性,构造器等方法,创建测试类,在main方法中创建Set接口的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了; 如果没有过滤,实现过滤功能;把每个小车的price降10000元,再遍历,查看price是否已改变
i汽车类 package com.lanxi.demo2_3; public class Car { private String name; private int price; @Override ...
- 第八节 多态和Object类
多态的定义:某一类事物的多种存在形态 例子:学生类:包含学生A和学生B 学生A对象对应的类型是学生A类型:StudentA studentA = new StudentA; Student stude ...
- Python 自动发送邮件
简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器 ...