我正在探索Java 8中引入的TemporalQuery
和TemporalAccessor
。TemporalAccessor
似乎是专门为时间对象设计的,例如日期,时间,偏移量或这些对象的某种组合。什么是时间对象?
一些谷歌搜索的含义为
随时间变化的对象
但是无法在Java的上下文中将其与此相关联?
答案 0 :(得分:7)
根据 Joda-Time& JSR 310,问题,概念和方法 [PDF],TemporalAccessor
:
定义只读对时态对象的访问权限, 例如日期,时间,偏移或某种组合 这些
JSR-310 Date and Time API Guide州:
字段和单元与抽象
Temporal
和TemporalAccessor
一起使用,以通用方式提供对日期时间类的访问。
这本书Beginning Java 8 Fundamentals: Language Syntax, Arrays, Data Types, Objects, and Regular Expressions说:
API中指定某种日期,时间或两者的所有类都是
TemporalAccesor
。LocalDate
,LocalTime
,LocalDateTime
和ZoneDateTime
是TemporalAccesor
的一些示例。
下一个是示例代码(基于上一本书中的一些示例):
public static boolean isFriday13(TemporalAccessor ta) { if (ta.isSupported(DAY_OF_MONTH) && ta.isSupported(DAY_OF_WEEK)) { int dayOfMonth = ta.get(DAY_OF_MONTH); int weekDay = ta.get(DAY_OF_WEEK); DayOfWeek dayOfWeek = DayOfWeek.of(weekDay); if (dayOfMonth == 13 && dayOfWeek == FRIDAY) { return true; } } return false; } public static void main(String[] args) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); TemporalAccessor ta = formatter.parse("02/13/2015"); LocalDate ld = LocalDate.from(ta); System.out.println(ld); System.out.println(isFriday13(ld)); }
答案 1 :(得分:2)
时间对象基本上是具有不同相关值的对象,例如日期对象上下文中的“月末”或“下周三”等。在Java8中这些被建模为调整基本日期时间的函数。函数实现 TemporalAdjuster 并对Temporal进行操作。例如,要查找给定日期后第一次出现的星期几,请使用 TemporalAdjusters.next(DayOfWeek),例如 date.with(下一个(星期一))。