教材学习内容总结
第13章 时间与日期
13.1 认识时间与日期
13.1.1 时间的度量
- 格林威治时间(GMT)
- 世界时(UT)
- 国际原子时(TAI)
- 世界协调时间(UTC)
-
Unix时间:Unix系统的时间表示法
-
epoch:来自于Unix的系统、平台、软件等选用这个时间作为时间表示法的起算点
13.1.2 年历简介
13.1.3 认识时区
13.2 认识Data与Calender
13.2.1 时间轴上瞬间的Data
- 使用
System.currentTimeMillis()方法,取得系统时间,返回 long 类型整数
- 使用
Date实例取得系统时间描述,Date有两个构造函数,一个可使用epoch毫秒数构建,另一个为无自变量构造函数(内部亦是使用System.currentTimeMiilis()取得eqoch毫秒数),调用getTime()可取得内部保存的epoch毫秒数值
-
setTime()(用来设置epoch毫秒数)
- 字符串时间格式的处理
13.2.2 格式化时间日期的DataFormat
-
java.text.DateFormat复责字符串时间格式处理,DataFormat是个抽象类,其操作类为java.text.SimpleDataFormat,可以直接构建SimpleDataFormat实例,或是使用DataFormat的getDataInstance()、getTimeInstance()、getDataTimeInstance()等静态用法
-
getDateInstance()、getTimeInstance()、getDataTimeInstance()等静态方法主要是取得不同详细程度的日期时间,取得DataFormat实例时,也可以指定Locale实例,将日期时间格式化为指定的语系方式
- 直接构建
SimpleDateFormat的好处是可使用模式字符串自定义格式
-
SimpleDateFormat有parse()方法,按照SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例
13.2.3 处理时间日期的Calendar
-
Calendar实例取得某个时间日期信息,或者对时间日期进行操作
-
Calendar是个抽象类,java.util.GregorianCalendar是其子类,通过Calendar的getInstance()取得的Calendar实例,默认就是取得GregorianCalendar实例
- 取得
Calendar实例后,可以使用getTime()取得Date实例,使用get()方法并指定Calendar上的字段枚举常数
- 设定时间日期,不要对
Date设定,应该使用Calendar,月份的部分使用枚举常数定义
- 取得
Calendar实例后,使用add()方法,改变Calendar的值,只针对日期中的某个字段加减,使用roll()方法
- 日历时间可以使用
GregorianCalendar的setGregorianCalendar()方法来修改,设为Date(Long.MAX_VALUE)为纯粹的儒略历,Date(Long.MIN_VALUE)是纯粹的格里高利历
- 比较两个
Calendar的时间日期先后,使用after()或before()方法
13.2.4 设定TimeZone
-
java.util.TimeZone的getDefault()来取得默认时区信息
- 取得指定时区的
TimeZone实例,可以使用ID字符串
- 用
TimeZone.getAvaliableIDs()取得可用的ID,返回String[]
-
Calender在调用getInstance()时可以指定Timezone,如果已经取得Calender实例,可以通过setTimeZone()的方法设定时区
13.3 JDK8新时间日期API
13.3.1 机器时间观点的API
-
Date是机器的时间观念
- 日期处理API主要套件命名
java.time,机器相关的时间概念Instant类
- 使用
Instant的静态方法now()取得Instant实例,ofEpochMilli()可以指定Java epoch毫秒数,ofEpochSecod()指定秒数
- 取得
Instant实例后,可以使用plusSecond()``plusMillis()``plusNanos()``minusSeconds()``minusMillis()``MinusNanos()做时间轴上的运算,返回新的Instant实例,代表运算后的时间
13.3.2 人类时间观点的API
- 1.
LocalDateTime、LocalDate和LocalTime
- 对于片段的时间日期时间的描述,不具时区的时间与日期定义
- 2.
ZonedDateTime和OffsetDateTime
- 基于
LocalDateTime、LocalDate和LocalTime来补齐缺少的时区信息
- Instant通过
atZone()``atOffset()转化成ZonedDateTime和OffsetDateTime,ZonedDateTime和OffsetDateTime可通过toInstant()取得Instant,ZonedDateTime和OffsetDateTime都有toLocalDate()``toLocalTime()``toLocalDateTime()取得localDate、localTime、localDateTime
- 3.
Year``YearMonth``Month``Mothday
-
Month是enum类型,取得代表月份的数字,不要使用oridinal()方法(enum在定义时的顺序,从0开始),使用getValue()方法
13.3.3 对时间的运算
- 1.
TemporaAmount
- 操作类
Period``Duration
- 时间计量,新时间和日期用API用类
Duration来定义,对于年、月、日、星期的日期差,可使用Period类定义(静态方法ofDays()``ofMonths()``ofWeeks(),返回Period实例)
-
plus()方法接受java.time.temporal.TemporalAmount实例
- 2.
TemporalUnit
-
plus()方法的另一重载版本,接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是其实做类,使用enum实做
- 3.
Temporal
- 4.
TemporalAccessor
13.3.4 年历系统设计
-
java.time套件中的类在需要实行年历系统时采用单一ISO8601年历系统
教材学习中的问题和解决过程
- 问题:p440程序中增强for循环语句含义
- 解决过程:将
values()方法取得的结果依次赋给新建的Month类型封装的month对象
本周代码托管截图




代码调试中的问题和解决过程
- 问题:p438代码,取得时间信息为什么用了两个
getTime()
- 解决过程:第一个
getTime()是Calendar实例方法,返回Date实例,第二个getTime()是Date实例方法,通过Date实例取得epoch毫秒数
其他(感悟、思考等,可选)
- 本周学习的知识一开始讲一些有关时间的各种历法的理论知识,有些觉得没有太大用处就快速看过了,结果看到后面机器时间与人类时间的不同时就理解不了了,没办法只能回头再看一遍
- 感受到了自己真正积极主动一行行的敲代码,才没能理解,达到敲代码的真正目的
学习进度条
|
代码行数(新增/累积) |
博客量(新增/累积) |
学习时间(新增/累积) |
重要成长 |
| 目标 |
5000行 |
30篇 |
400小时 |
|
| 第一周 |
30/30 |
1/2 |
16/16 |
基本概念 |
| 第二周 |
100/130 |
1/3 |
18/34 |
基础语法 |
| 第三周 |
100/230 |
1/4 |
26/60 |
对象封装 |
| 第四周 |
300/530 |
1/5 |
30/90 |
继承接口 |
| 第五周 |
300/830 |
1/6 |
30/120 |
异常Map、Collection
|
| 第六周 |
300/1230 |
2/8 |
30/150 |
输入输出、并行 |
| 第七周 |
100/1330 |
2/10 |
10/160 |
时间日期 |
相关文章:
-
2022-01-12
-
2021-12-09
-
2021-12-09
-
2021-06-27
-
2021-10-26
-
2021-05-29
-
2021-09-27
猜你喜欢
-
2021-09-07
-
2021-09-10
-
2022-01-03
-
2022-02-19
-
2021-08-23
-
2021-07-24
-
2021-06-22
相关资源
-
下载
2023-01-15
-
下载
2022-12-10
-
下载
2023-02-04