文档

Java™ 教程
路径:日期 时间
课程:标准日历
首页 > 日期时间 > 标准日历

问题和练习答案:日期时间API

问题

问题 1。你会用哪个类来存储你的生日,包括年份、月份、天数、秒数和纳秒数?

答案 1。最有可能你会使用LocalDateTime类。要考虑特定的时区,你可以使用ZonedDateTime类。这两个类都可以以纳秒精度跟踪日期和时间,并且这两个类与Period一起使用时,可以使用年、月和天等人类单位的组合来表示结果。

问题 2。给定一个随机日期,如何找到上一个星期四的日期?

答案 2。你可以使用TemporalAdjusterprevious方法:

LocalDate date = ...;
System.out.printf("上一个星期四的日期是:%s%n",
          date.with(TemporalAdjuster.previous(DayOfWeek.THURSDAY)));

问题 3。什么是ZoneIdZoneOffset之间的区别?

答案 3ZoneIdZoneOffset都跟踪与格林威治/协调世界时的偏移量,但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.javaFridayThirteenQuery.java以获取解决方案。


上一页: 问题和练习:日期时间 API