20145206 《Java程序设计》第7周学习总结
教材学习内容总结
第十三章 时间与日期
13.1.1 时间的度量
·即使标注为GMT(格林威治时间),实际上谈到的的是UTC(Unix时间)时间。
·秒的单位定义时基于TAI。也就是铯原子辐射的振动次数。
·UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。最近一次的闰秒修正为2012年6月30日。
·Unix时间是1970年1月1日00:00:00为起点二经过的描述,不考虑闰秒,很多Unix系统、平台、软件等,都选择这时间作为时间表示发的起算点。
13.1.2 年历简介
·儒略历:修正了罗马历隔三年设置一闰年的错误,改采四年一闰。
·格力高利历:将儒略历1582年10月4号星期四的隔天,订为格里高利历1582年10月15日星期五。
·ISO 8601标准,采用统一的数据格式例如:yyyy-mm-ddTHHH:MM:SS.SSS等。
13.1.3 认识时区
UTL偏移
日光节约时间:也称为夏季时间,基本上就是在实施的第一天,让白天的时间增加一小时,而最后一天结束后再调整一小时回来。
13.2.1 时间轴上瞬间的Date
·如果想取得系统时间,方法之一就是使用System.currentTimeMillis()方法,返回long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。
P429范例如下:
package CH7;
/**
* Created by Administrator on 2016/4/16.
*/
import java.util.*;
import static java.lang.System.*;
public class DateDemo {
public static void main(String[] args) {
Date date1 = new Date(currentTimeMillis());
Date date2 = new Date();
out.println(date1.getTime());
out.println(date2.getTime());
}
}
有关于字符串时间格式的处理,不再是Date的职责。
13.2.2 格式化时间日期的DateFormat
有关字符串时间格式的处理,职责落到了java.text.DateFormat身上。可以通过DAteForm的各种静态方法,进行格式化;还可以使用模式字符串自定义格式。
parse()方法,可以将指定的字符串剖析为Date实例。
package CH7;
/**
* Created by Administrator on 2016/4/16.
*/
import java.util.*;
import java.text.*;
public class HowOld {
public static void main(String[] args) throws Exception {
System.out.print("输入出生年月日(yyy-mm-dd):");
DateFormat dateFormat = new SimpleDateFormat("yyy-mm-dd");
Date birthDate = dateFormat.parse(new Scanner(System.in).nextLine());
Date currentDate = new Date();
long life = currentDate.getTime()-birthDate.getTime();
System.out.println("你今年的岁数为:"+(life/(365*24*60*60*1000L)));
}
}
13.2.3 处理时间日期的Calendar
·Date建议作为时间轴上的瞬时代表,要格式化时间日期则通过DateFormat,如果想要取得某个时间日期信息,或者是对时间日期进行操作,可以使用calendar。
·建立Calendar实例,可以使用get()方法并指定Calendar上的字段。 使用add()方法改编时间,使用roll()方法只针对日期中的某个字段加减。
13.2.4 设定TimeZone
·使用Calendar时,并没有使用时区信息,这回使用该默认时区,可以使用java.util.TImeZone的getDefault()来取得默认时区信息
·可用的ID可以使用TimeZone.getAvailableIDs()来取得,它会返回String[]
13.3.1 机器时间观点的API
·由于某一时区已经不实施日光节约一段时间了,许多开发者并不知道过去有过日光节约时间,在取得Date实例后,被名称Date误导他们代表日期,所以不应该使用Data实例来得知人类观点的时间信息。
·真正可靠的信息只有内含epoch毫秒数。同时也可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。
13.3.2 人类时间观点的API
·LocalDateTime只包括时间与日期,LocalDate只有日期,LocalTime只有时间,他们都是对时间的描述,没有时区信息。
·若需要时区信息,可基于上述三个时间描述的ZoneDateTime和OffsetDateTIme.
13.3.3 对时间的运算
1.TemporalAmount
时间差以Duration定义,日期差以Period定义。
2.TemporalUnit
between()方法用于计算时间差
3.Temporal
4.TemporalAccessor定义了只读的时间对象
教材学习中的问题和解决过程
从P432代码运行结果上看:
正如书上解释的那样,一年的毫秒数并不是如这个范例中,可以简单的使用3652460601000计算出来,实际上算出来的岁数也是错的,撰写的时间点是2016/4/16.因为还没过5/26,所以应当是40岁。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/2 | 10/15 | |
第二周 | 100/200 | 2/4 | 15/30 | |
第三周 | 300/500 | 1/5 | 30/60 | |
第四周 | 300/800 | 1/6 | 30/90 | |
第五周 | 347/1147 | 1/7 | 30/120 | |
第六周 | 352/1499 | 2/9 | 30/150 | |
第七周 | 258/1757 | 2/11 | 30/180 |