如何将 LocalTime 添加到 Date 对象中?

Kay*_*inc 0 java date java-time

如果我能按照我的要求做,那就完美了!

    <<LocalTime is provided as locTime>>
    Date flyDate = a.getDate();
    Date landingDate = b.getDate();

    flyDate.add(locTime);
Run Code Online (Sandbox Code Playgroud)

或者我可以了解什么是最佳实践。

我有一堆 Flight 对象,目前它们每个都有一个 Date 来确定航班的飞行日期/时间,还有一个用于 LocalTime 的持续时间,表示飞行需要多少小时:分钟。

我想检查一个航班在时间方面是否与另一个航班兼容。航班a的着陆时间应该在航班b的飞行时间之前。

谢谢!

小智 6

正如其他人所说,这是一个有问题的问题,因为 LocalTime 和 Date 确实代表了完全不同且几乎不相关的概念。LocalTime 是一天中没有时区的时间,例如 19:45(或晚上 7:45)。日期是时间线上的一个点;如果它恰好与某个时区某个日期的 19:45 重合,则不会在其他时区。

我相信误用(实际上)一个小时的日期的传统方法是将它设置为 1970 年 1 月 1 日在 JVM 的默认时区中的那个时间。这种做法承担了已经提到的所有责任。特别是 JVM 默认时区设置可以随时从程序的另一部分或在同一 JVM 中运行的任何其他程序进行更改。这意味着一个完全不相关的程序可能会突然导致您的 Date 指示与您初始化它的时间不同的时间。

我们无能为力,所以就这样吧

LocalTime time = LocalTime.of(11, 0);

    Instant timeOnEpochDayInDefaultTimeZone = LocalDate.EPOCH
            .atTime(time)
            .atZone(ZoneId.systemDefault())
            .toInstant();
    Date oldfashionedDateObject = Date.from(timeOnEpochDayInDefaultTimeZone);

    System.out.println(oldfashionedDateObject);
Run Code Online (Sandbox Code Playgroud)

最后输出是

UTC 1999 年 5 月 3 日星期二 11:00:00