什么是Java中的时态对象?

时间:2015-01-30 05:24:55

标签: java java-8

我正在探索Java 8中引入的TemporalQueryTemporalAccessorTemporalAccessor似乎是专门为时间对象设计的,例如日期,时间,偏移量或这些对象的某种组合。什么是时间对象? 一些谷歌搜索的含义为

  

随时间变化的对象

但是无法在Java的上下文中将其与此相关联?

2 个答案:

答案 0 :(得分:7)

根据 Joda-Time& JSR 310,问题,概念和方法 [PDF]TemporalAccessor

  

定义只读对时态对象的访问权限,   例如日期,时间,偏移或某种组合   这些

JSR-310 Date and Time API Guide州:

  

字段和单元与抽象TemporalTemporalAccessor一起使用,以通用方式提供对日期时间类的访问。

这本书Beginning Java 8 Fundamentals: Language Syntax, Arrays, Data Types, Objects, and Regular Expressions说:

  

API中指定某种日期,时间或两者的所有类都是TemporalAccesorLocalDateLocalTimeLocalDateTimeZoneDateTimeTemporalAccesor的一些示例。

下一个是示例代码(基于上一本书中的一些示例):

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(下一个(星期一))