20145235《Java程序设计》第7周学习总结
教材学习内容总结
13.1 认识时间与日期
- 格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为椭圆形且速度不一,本身自传减速而造成误差。
- 世界时(UT):通过观测远方星体跨过子午线而得,受地球自转速度影响有误差。
- 国际原子时(TAI):将秒的国际单位定义为铯原子辐射振动9192631770周耗费的时间。
- 世界协调时间(UTC):保持TAI和UT时间误差不要过大采用了闰秒修正。
- Unix时间:Unix系统时间表示法,定义为UTC时间1970年1月1日为起点经过的秒数,不考虑闰秒修正。
- epoch:某个特定时间开始,时间轴上的某一瞬间。
- 儒略历:现今公历的前身,修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
- 格里高利历:改革了儒略历,将儒略历1582年10月4号星期四的隔天,订为格里高利历1582年10月15日星期五。
- ISO 8601标准:统一时间日期的数据交换格式。
- UTC偏移:精度每15度偏移1小时,通常表示Z符号。
- 日观节约时间:夏、冬日照时间差异很大时实施。
13.2 认识Date与Calendar
Date:取得系统时间,方法之一就是使用System.currentTimeMillis()
方法,返回long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。Date有两个构造函数可以使用,一个可使用epoch毫秒数构建,另一个为无自变量构造函数,内部亦是使用System.currentTimeMillis()
取得毫秒数,调用getTime()
可取得内部保存的epoch毫秒数值。
有关字符串时间格式的处理,职责落到了java.text.DateFormat
身上。可以通过DAteForm的各种静态方法,进行格式化;还可以使用模式字符串自定义格式。parse()方法,可以将指定的字符串剖析为Date实例。
- Date建议作为时间轴上的瞬时代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用calendar。
- 建立Calendar实例,可以使用get()方法并指定Calendar上的字段。 使用add()方法改编时间,使用roll()方法只针对日期中的某个字段加减。
- 使用Calendar时,并没有使用时区信息,这回使用该默认时区,可以使用java.util.TImeZone的getDefault()来取得默认时区信息
- 可用的ID可以使用TimeZone.getAvailableIDs()来取得,它会返回String[]
13.3 JDK8新时间日期API
- LocalDateTime只包括时间与日期,LocalDate只有日期,LocalTime只有时间,他们都是对时间的描述,没有时区信息。
- 如果你的时间日期需要带有时区,可以基于LocalDateTime、LocalDate、LocalTime等来补充缺少的信息。
- 如果想要取得代表月份的数字,不要使用oridinal()方法,因为oridinal()是enum在定义时的顺序,从0开始,想要取得代表月份的数要通过getValue()方法。
- 在新的时间与日期API中,UTC偏移量与时区的概念是分开的,offsetDateTime单纯代表UTC偏移量,使用ISO 8601。如果只想表示2014年,可以使用Year,如果想表示2014/5,可以使用YearMonth,如果只想表示5月,可以使用Month,如果想表示5/4,可以使用MonthDay,其中Month是enum型,如果你想要取得代表月份的数字,不要使用oridinal()方法,因为oridinal()是enum在定义时的顺序,从0开始,想要取得代表月份的数要通过getValue()方法。
- 对时间的运算:period与Duration乍看有些难区别,period是日期差,between()方法只接受LocalDate,不表示比“日”更小的单位。然而Duration是时间差,between()方法可以接受LocalDateTime()、LocalDate()、LocalTime(),不表示比“天”更大的单位。
代码托管情况
其他(感悟、思考等,可选)
我感觉这学期我做了大量没用的事情,这学期的主修课不像以往学期那样用课余时间去静下心来好好看,我不想欺骗自己,不会就是不会,学不懂就是学不懂,但是不会不懂并不代表放弃,就算是爬也要爬到终点。这周一从头开始看java视屏了,感觉效果超级棒,尽管做有些东西是背叛自己欺骗自己,但是我觉得值,因为我绝不愿意到头来一无所获。难免有天生自怜的情绪,难免自己感动自己,唯有保持清新,才能看清真正的价值。