您的位置:首页 > 编程语言 > Java开发

20145232 韩文浩 《Java程序设计》第7周学习总结

2016-04-17 12:16 295 查看

教材学习内容总结

就目前来说,即使标注为GMT(格林威治时间),实际上谈到的时间指的是UTC时间。

秒的单位定义时基于TAI。也就是铯原子辐射的振动次数。

UTC考虑了地球自转越来越慢而有闰秒修正,确保UTC与UT相差不会超过0.9秒。最近一次的闰秒修正为2012年6月30日,当时TAI实际上已超前UTC有35秒之长。

Unix时间是1970年1月1日00:00:00为起点二经过的描述,不考虑闰秒,不少来自于Unix系统、平台、软件等,也都选择这时间作为时间表示发的起算点。

儒略历:修正了罗马历隔三年设置一闰年的错误,改采四年一闰。

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

ISO 8601标准,采用统一的数据格式例如:yyyy-mm-ddTHHH:MM:SS.SSS等标准格式。

如果想取得系统时间,方法之一就是使用
System.currentTimeMillis()
方法,返回long类型整数,代表1970年1月1日0时0分0秒0毫秒至今经过的毫秒数。以此方法取得的是机器的时间观点,代表时间轴上的某一瞬间。

教材P429 DateDemo.java运行结果如下



通过DateFormat的各种静态方法进行格式化:

教材P430 DateFormatDemo.java运行结果如下



其实,我们也可以直接构建SimpleDateFormat,这样我们就可以使用模式字符串自定义格式。它还有一个prase()方法,可以构建SimpleDateFormat时指定的格式,将指定的字符串剖析为Date实例。

教材P432 HowOld.java

........
System.out.println("你今年的岁数为:"+
(life / (365 * 24 * 60 * 60 * 1000L)));

运行结果如下



但是!我应该还是19周岁!2016年的10月15日还没有到。这个只是简单地范例,并不能准确计算用户岁数。

在时间的处理中,若是我们想取得某个时间信息或者对时间信息进行操作,我们可以用Caendar实例。它是一个混合类,操作了儒略历与格里高利历的混合历,在书中,若是我们想比较两个Calendar的日期先后,可以使用after和before的方法。在这里使用Calendar计算用户的岁数才是比较合理的。

教材P435 CalendarUtil.java

将代码中的生日设定改成自己的,

运行结果如下



这才是正确的年龄哈。

在前面使用Calendar时并没有使用时区信息,在这里,我们可以使用
java.util.TimeZone
getDefault()
来取得默认时区信息。

教材P436 TimeZoneDemo.java运行结果如下



Calendar在调用getInstance()时,可以指定TimeZone,如果已经取得Calendar实例,也可以通过setTimeZone()方法设定TimeZone。

教材P436 TimeZoneDemo2.java运行结果如下



由于某一时区已经不实施日光节约一段时间了,许多开发者并不知道过去有过日光节约时间,在取得Date实例后,被名称Date误导他们代表日期,所以不应该使用Data实例来得知人类观点的时间信息。

真正可靠的信息只有内含epoch毫秒数。同时也可以使用Instant的静态方法now()取得代表Java epoch毫秒数的Instant实例。

如果我们只想表示2014年,可以使用year,如果想表示2014/5可以使用yearmonth。如果只想表示五月,可以使用month,如果想表示5/4,可以使用monthday,其中months是emnu型。如果你想去的代表月份的数字,不要使用oridinal()方法从0开始,想要取得代表月份的数要通过getvalue()方法。

教材P440 MonthDemo.java运行结果如下



在JDK8中,新日期时间处理实现了流畅API的概念,这是一种计算时间的新的方法,我们在前面曾经写过HowOld.java,在这里我们可以使用新方法进行改进。

教材P442 HowOld2.java运行结果如下



教材学习中的问题和解决过程

几个概念的理解还需要更加明确。

LocalDateTime、LocalDate和LocalTime

这些类基于ISO 8601年历系统,是不具失时区的时间与日期定义。LocalDateTime、LocalDate和LocalTime 等类名称开头为Local,表示它们都只是对时间的描述,并没有时区信息。

ZonedDateTime和OffsetDateTime

ZonedDateTime和OffsetDateTime间可以通过toXXX()方法互转,Instant通过atZone()与atOffset()转为ZonedDateTime和OffsetDateTime,ZonedDateTime和OffsetDateTime也都可以通过toInstant()取得Instant,ZonedDateTime和OffsetDateTime都有toLocalDate()、toLocalTime()、toLocalDateTime()方法可以取得LocalDate、LocalTime和LocalDateTime。

Year、YearMonth、Month和MonthDay

Month是enum类型,想要取得代表月份的数字,不要使用oridinal()方法,需要使用getValue()方法。

代码调试中的问题和解决过程

在自己生日输入的时候一定要遵循标准的格式,10以内的数字输入时一定要加0,例如"09"

本周代码托管截图



其他(感悟、思考等,可选)

这一周主要看了第十三章,关于时间与日期以及时间日期处理API。瞧的代码比以前有所减少,更多了理解。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标4000行16篇400小时
第一周200/2002/220/20
第二周300/5001/325/45
第三周500/10001/440/85
第四周800/18001/545/130
第五周700/25001/643/173
第六周700/32001/748/221
第七周400/36001/839/260

参考资料

Java学习笔记(第8版)

《Java学习笔记(第8版)》学习指导
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: