java JDK8 学习笔记——第13章 时间与日期
第十三章 时间与日期
13.1 认识时间与日期
13.1.1 时间的度量
1、格林威治标准时间GMT
格林威治标准时间的正午是太阳抵达天空最高点之时。现在已经不作为标准时间使用。
2、世界时UT
世界时是借由观测远方星体跨过子午线而得,在引入UTC之前,GMT和UT是相同的。
3、国际原子时TAI
将秒的国际单位定义为铯原子辐射振动91926331770周耗费的时间,从UT的1958年开始同步。
4、世界协调时UTC
采用了闰秒修正,确保UTC与UT相差不会超过0.9秒,加入闰秒的时间通常会在6月底或12月底。
5、Unix时间
定义为UTC时间1970年1月1日00:00:00为起点而经过的描述,不考虑闰秒修正,用以表达时间轴上的某一瞬间。
6、epoch
某个特定时代的开始,时间轴上某一瞬间。
7、重点总结
(1)即使标注为GMT时间,实际上谈到时间指的是UTC时间。
(2)秒的单位定义是基于TAI,也就是铯原子辐射振动次数。
(3)UTC考虑了地球自转越来越慢而又闰秒修正,确保哦UTC与UT相差不会超过0.9秒。
(4)Unix时间是1970年1月1日00:00:00为起点而经过的秒数,不考虑闰秒。
13.1.2 年历简介
1、儒略历
儒略历是现今公历的前身,用来取代罗马历,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
2、格里高利历
格里高利历将儒略历1582年10月4日星期四的隔天,订为格里高利历1582年10月15日星期五。
3、ISO 8601标准
ISO 8601并非年历系统,而是时间日期表示方法的标准,用意统一时间日期的数据交换格式。在ISO 8601标准的定义中,19世纪是指1900年到1999年,而格里高利历的19世纪是指1801年到1900年。
13.1.3 认识时区
1、考虑了UTC偏移的时间表示上,通常会标识Z符号。
2、日光节约时间
也称为夏季时间,基本上就是在时时的第一天,让白天的时间增加一小时,而最后一天结束后在调整一小时回来。
13.2 认识Date与Calendar
13.2.1 时间轴上瞬间的Date
1、取得系统时间的方法之一是:
使用System.currentTimeMillis()方法,返回的是long类型的整数,代表1970年1月1日00:00:00至今经过的毫秒数。
2、Date实例
Date实例基本上建议只用来当做时间轴上的某一瞬间。有关字符串时间格式的处理不再是Date的职责。
13.2.2 格式化时间日期的DateFormat
1、DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat。
取得SimpleDateFormat实例的方法
(1)直接构建SimpleDateFormat实例
(2)使用DateFormat的getDateInstance()、getTimeInstance()、getDateTimeInstance()等静态方法。
2、直接构建SimpleDateFormat的好处是,可使用模式字符串自定义格式。
3、相对于DateFormat可进行日期时间格式化,java.text.NumberFormat可用来进行数字格式化,他们都是java.text.Format的子类。
13.2.3 处理时间日期的Calendar
1、Calendar实例
用于取得某个时间日期信息,或者是对时间日期进行操作。
Calendar是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar的实例。
2、如果打算只针对日期中某个字段加减,则可以使用roll()方法。
3、日历时间可以使用GregorianCalendar的setGregorianCalendar()方法来修改,设为Date(Long.MAXVALUE)就是纯粹的儒略历,设为Date(Long.MINVALUE)就是纯粹的格里高利历。
4、注意:
在Calendar实例上进行add()之类的操作,会修改Calendar实例本身,为了避免调用yearsBetween()、daysBetween()之后传入的Calendar自变量被修改,两个方法中都对第一个自变量进行了clone()复制对象的动作。
13.2.4 设定TimeZone
使用java.util.TimeZone的getDefault()来取得默认时区信息。
13.3 JDK8新时间日期API
13.3.1 机器时间观点的API
1、Calendar的getTime()返回false实例,取得Date实例,下一步应该获取时间信息,应该是通过Date的getTime()取得epoch毫秒数。
2、机器相关的时间概念——Instant类
用以代表自定义的Java epoch之后的某个时间点历经的毫秒数,精确度基本上是毫秒。使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例,取得Instant实例后,可以使用plusSeconds()、plusMillis()、plusNanos()、minusSeconds()、minusMillis()、minusNanos()来做时间轴上的运算,Instant实例本身不会变动,这些操作会返回新的Instant实例,代表运算后的瞬时。
13.3.2 人类时间观点的API
1、LocalDateTime、LocalDate和LocalTime
这些类基于ISO 8601年历系统,是不具失时区的时间与日期定义。LocalDateTime、LocalDate和LocalTime 等类名称开头为Local,表示它们都只是对时间的描述,并没有时区信息。
2、ZonedDateTime和OffsetDateTime
ZonedDateTime和OffsetDateTime间可以通过toXXX()方法互转,Instant通过atZone()与atOffset()转为ZonedDateTime和OffsetDateTime,ZonedDateTime和OffsetDateTime也都可以通过toInstant()取得Instant,ZonedDateTime和OffsetDateTime都有toLocalDate()、toLocalTime()、toLocalDateTime()方法可以取得LocalDate、LocalTime和LocalDateTime。
3、Year、YearMonth、Month和MonthDay
Month是enum类型,想要取得代表月份的数字,不要使用oridinal()方法,需要使用getValue()方法。
13.3.3 对时间的运算
1、TemporalAmount
对于时间的计量,新时间与日期API以类Duration来定义,可拥有计量天、时、分、秒的时间差,精确度调整可以达到纳秒等级,而秒的最大值可以是long类型可保存值。对于年、月、星期、日的日期差,则使用Period类定义。
2、TemporalUnit
plus()方法另一重载版本,接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是TemporalUnit实作类,使用enum实作。
3、Temporal
Instant、LocalDateTime、LocalDate、LocalTime、ZonedDateTime和OffsetDateTime都操作了Temporal接口。
4、TemporalAccessor
TemporalAccessor定义了只读的时间对象读取操作,实际上Temporal是TemporalAccessor子接口,增加了对时间的处理操作。
MonthDay是只读的。
13.3.4 年历系统设计
1、java.time套件中的类在需要实行年历系统时都是单一的ISO8601年历系统。
2、需要使用其他年历系统时
需要明确实行java.util.chrono中等操作了java.time.chrono.Chronology接口类。
java JDK8 学习笔记——第13章 时间与日期的更多相关文章
- java JDK8 学习笔记——第16章 整合数据库
第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...
- java JDK8 学习笔记——第15章 通用API
第十五章 通用API 15.1 日志 15.1.1 日志API简介 1.java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处.使用日 ...
- java JDK8 学习笔记——第11章 线程和并行API
第11章 线程与并行API 11.1 线程 11.1.1 线程 在java中,如果想在main()以外独立设计流程,可以撰写类操作java.lang.Runnable接口,流程的进入点是操作在run( ...
- java JDK8 学习笔记——第18章 自定义泛型、枚举与注释
第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 ...
- java JDK8 学习笔记——第17章 反射与类加载器
第十七章 反射与类加载器 17.1 运用反射 反射:.class文档反映了类基本信息,从Class等API取得类信息的方式称为反射. 17.1.1 Class与.class文档 1.java.lang ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- #Python学习笔记:1-3章 (基于《python编程,从入门到实践)
第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...
- Java JDK8 学习笔记 1-3章
第一章 Java平台概论 1.了解Java的前世今生,Java SE.Java EE.JavaME三大平台.其中Java SE主要由四部分JVM.JRE.JDK与Java语言,JDK包含JRE,JRE ...
- R语言学习笔记-机器学习1-3章
在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...
随机推荐
- 图文详解YUV420, yuv格式2
YUV格式有两大类:planar和packed. 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V. 对于packed的YUV格式,每个像素点的Y ...
- PHP 输出表格单元格的数据之用表单的方式;
echo "<table border=1 class="imagetable" >"; //使用表格格式化数据echo "<for ...
- Date类型和Long类型的相互转换
Date类型和Long类型的相互转换: import java.text.SimpleDateFormat; import java.util.Date; public class T { publi ...
- 二分搜索 UVALive 6076 Yukari's Birthday (12长春K)
题目传送门 题意:问使得sum (k^i) = n || n -1 (1 <= i <= r) 的min (r*k)组合的r和k 分析:r的最大不会超过40,枚举r,二分搜索k.注意会爆 ...
- BZOJ4320 : ShangHai2006 Homework
取$M=\sqrt{300000}$. 设$g[i]$表示程序员的$\bmod i$最小的值. 若$Y<M$,那么可以在$O(M)$时间内完成对所有$g[i]$的修改,$O(1)$时间内完成查询 ...
- BZOJ1185 : [HNOI2007]最小矩形覆盖
求出凸包后,矩形的一条边一定与凸包的某条边重合. 枚举每条边,求出离它最远的点和离它最左最右的点,因为那三个点是单调变化的,所以复杂度为$O(n)$. 注意精度. #include<cstdio ...
- webkit webApp 开发技术要点总结【转】
如果你是一名前端er,又想在移动设备上开发出自己的应用,那怎么实现呢?幸好,webkit内核的浏览器能帮助我们完成这一切.接触 webkit webApp的开发已经有一段时间了,现把一些技巧分享给大家 ...
- 20145302张薇《Java程序设计》实验三报告
20145302张薇<Java程序设计>实验三:敏捷开发与XP实践 实验内容 使用git上传代码 使用git实现代码开发实践 实现代码的重载 使用git上传代码 git init git ...
- CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access
在创建要素时出现如下异常,百思不得其解. 后经过多次试验,发现文件名改为其他的就可以了.自出的文件名为"第3条",后将文件名改为"A3"等,则可正常创建. 后再 ...
- discuz全局数组变量 后台各项设置 完整版
$_G 保存了 Discuz! 中所有的预处理数据 缓存能够很好的提高程序的性能,一些配置数据没必要每次都查询数据库,只要在修改了的时候更新下缓存即可. Discuz! 中所有的缓存保存在 $_G[c ...