20145212 《Java程序设计》第7周学习总结

本文总结了Java中时间与日期的处理方式,包括不同时间标准的定义与转换、日期格式化、时间运算等内容,并介绍了JDK8中新引入的时间日期API。

20145212 《Java程序设计》第7周学习总结

教材学习内容总结

时间的度量

  • 格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差。

  • 世界时(UT):通过观测远方星体跨过子午线而得,受地球自转速度影响有误差。

  • 国际原子时(TAI):将秒的国际单位定义为铯原子辐射振动9192631770周耗费的时间。

  • 世界协调时间(UTC):保持TAI和UT时间误差不要过大采用了闰秒修正。

  • Unix时间:Unix系统时间表示法,定义为UTC时间1970年1月1日为起点经过的秒数,不考虑闰秒修正。

  • epoch:某个特定时间开始,时间轴上的某一瞬间。

  • 重点总结:
    1.即使标注为GMT时间,实际上谈到时间指的是UTC时间。
    2.秒的单位定义是基于TAI,也就是铯原子辐射振动次数。
    3.UTC考虑了地球自转越来越慢而又闰秒修正,确保哦UTC与UT相差不会超过0.9秒。
    4.Unix时间是1970年1月1日00:00:00为起点而经过的秒数,不考虑闰秒。

年历简介

  • 儒略历
    儒略历是现今公历的前身,用来取代罗马历,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。

  • 格里高利历
    格里高利历将儒略历1582年10月4日星期四的隔天,订为格里高利历1582年10月15日星期五。

  • ISO 8601标准
    ISO 8601并非年历系统,而是时间日期表示方法的标准,用意统一时间日期的数据交换格式。在ISO 8601标准的定义中,19世纪是指1900年到1999年,而格里高利历的19世纪是指1801年到1900年。

时区

  • UTC偏移:精度每15度偏移1小时,通常表示Z符号。

  • 日观节约时间:夏、冬日照时间差异很大时实施。

时间轴上瞬间的Date

  • 取得系统时间的方法之一是:
    使用System.currentTimeMillis()方法,返回的是long类型的整数,代表1970年1月1日00:00:00至今经过的毫秒数。

  • Date实例
    1.Date实例基本上建议只用来当做时间轴上的某一瞬间。有关字符串时间格式的处理不再是Date的职责。
    2.Date有两个构造函数可以使用,一个可使用epoch毫秒数构建,另一个为无自变量构造函数,内部亦是使用System.currentTimeMillis()取得毫秒数,调用getTime()可取得内部保存的epoch毫秒数值。
package javaapplication34;
import java.util.*;
import static java.lang.System.*;
public class JavaApplication34 {
    public static void main(String[] args) {
        Date date1=new Date(currentTimeMillis());
        Date date2=new Date();
        out.println(date1.getTime());
        out.println(date2.getTime());
    }
}

877181-20160417200823879-1494986793.png

格式化时间日期的DateFormat

  • DateFormat是个抽象类,其操作类是java.text.SimpleDateFormat。

877181-20160417202254738-1216065634.png

Calendar: 时间的运算

  • Calendar:想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用Calendar实例。Calendar是个抽象类,java.util.GregorianCalendar是其子类,操作了儒略历与格里高利历的混合历。可以设定时间日期等字段,使用add()方法改变Calendar的时间,使用roll()方法加减日期中某个字段,使用after()或before()方法比较两个Calendar的时间日期先后。

  • TimeZone:Calendar时会使用默认时区,可以使用java.util.TimeZone的getDefault()来取得默认时区信息。

  • 如果打算只针对日期中某个字段加减,则可以使用roll()方法。

  • 日历时间可以使用GregorianCalendar的setGregorianCalendar()方法来修改,设为Date(Long.MAXVALUE)就是纯粹的儒略历,设为Date(Long.MINVALUE)就是纯粹的格里高利历。

JDK8新时间日期API

  • 机器时间 Instant

许多开发者并不知道过去有过日光节约时间,在取得Date实例后,被名称Date误导,认为他们代表日期,真正可靠的信息只有内含epoch毫秒数。所以不应该使用Data实例来得知人类观点的时间信息,可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

  • 人类时间(ISO8601 标准)

1.LocalDateTime:包括日期与时间。

2.LocalDate:只有日期,设定不存在的日期时会抛出DateTimeException错误。

3.LocalTime:只有时间。

4.ZonedDateTime:当补上时区信息后组合起来的时间实际上不存在时,ZonedDateTime会自动更正。

5.OffsetdateTime:单纯代表UTC偏移量,使用ISO 8601。

6.Year、YearMonth、Month、MonthDay:如果只想要表示年或月,使用Year或Month;如果想要表示年月或月日,使用YearMonth或MonthDay。

  • 对时间的运算

1.TemporalAmount:TemporalAmount的操作类是Period和Duration。ofPattern()是java.time.format.DateTimeFormatter的静态方法,对于年、月、星期、日的日期差使用Period类定义,plus()方法可以接受Duration实例来计算,对于时间计量,类Duration来定义。

2.TemporalUnit:plus()方法另一重载版本接受java.time.temporal.TemporalUnit实例,java.time.temporal.ChronoUnit是TemporalUnit实作类,使用enum实作,定义了between()等方法。

3.Temporal:

plus(TemporalAmount amount)

plus(long amountToAdd,TemporalUnit unit)

minus(TemporalAmount amount)

minus(long amountToSubtract,TemporalUnit unit)

4.TemporalAccessor:定义了只读的时间对象读取操作,实际上Temporal是TemporalAccessor子接口,增加了对时间的处理操作,像是plus()、minus()、with()等方法。

本周代码托管截图

877181-20160417205311801-1815605557.png

其他

七周的学习,我们已经基本学完了Java的基础知识。但是我知道自己并没有掌握好每一个点,如果现在让我独立去编写一个程序,很可能依旧会出现很多错误和漏洞。
在接下来的学习中,我就要多多实践,多编写程序,通过经验的积累让自己对Java的理解逐渐深入。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周200/2002/210/10
第二周300/5001/316/26
第三周300/8001/418/44
第四周300/11001/518/62
第五周250/13501/614/76
第六周400/17502/814/90
第七周300/20502/1010/100

参考资料

转载于:https://www.cnblogs.com/alovera/p/5402133.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值