Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
请参阅Java语言更改,了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明,了解所有JDK版本的新功能、增强功能和已删除或不建议使用的选项。
问题 1。你会用哪个类来存储你的生日,包括年份、月份、天数、秒数和纳秒数?
答案 1。最有可能你会使用LocalDateTime类。要考虑特定的时区,你可以使用ZonedDateTime类。这两个类都可以以纳秒精度跟踪日期和时间,并且这两个类与Period一起使用时,可以使用年、月和天等人类单位的组合来表示结果。
问题 2。给定一个随机日期,如何找到上一个星期四的日期?
答案 2。你可以使用TemporalAdjuster的previous方法:
LocalDate date = ...; System.out.printf("上一个星期四的日期是:%s%n", date.with(TemporalAdjuster.previous(DayOfWeek.THURSDAY)));
问题 3。什么是ZoneId和ZoneOffset之间的区别?
答案 3。ZoneId和ZoneOffset都跟踪与格林威治/协调世界时的偏移量,但ZoneOffset类只跟踪与格林威治/协调世界时的绝对偏移量。ZoneId类还使用ZoneRules来确定一个偏移量在一年中的特定时间和区域如何变化。
问题 4。如何将Instant转换为ZonedDateTime?如何将ZonedDateTime转换为Instant?
答案 4。你可以使用ZonedDateTime.ofInstant方法将Instant转换为ZonedDateTime。你还需要提供一个ZoneId:
ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
或者,你可以使用Instant.atZone方法:
ZonedDateTime zdt = Instant.now().atZone(ZoneId.systemDefault());
你可以使用ChronoZonedDateTime接口中的toInstant方法(由ZonedDateTime类实现)将ZonedDateTime转换为Instant:
Instant inst = ZonedDateTime.now().toInstant();
练习 1。编写一个例子,根据给定的年份报告该年份中每个月的长度。
答案 1。请参阅MonthsInYear.java
以获取解决方案。
练习 2。编写一个例子,列出当前年份中给定月份的所有星期一。
答案 2。请参阅ListMondays.java
以获取解决方案。
练习 3。编写一个例子,测试给定日期是否是一个“黑色星期五”。
答案 3。请参阅Superstitious.java
和FridayThirteenQuery.java
以获取解决方案。