【发布时间】:2014-12-05 13:55:27
【问题描述】:
有没有办法在 java.util.Calendar 中设置日历开始日期和结束日期。 例如,默认情况下,java.util.Calendar 的开始日期是 1 月 1 日,日历结束日期是 12 月 31 日。我有一些具体情况,我希望日历从 1 月 5 日开始,到 12 月 28 日结束。
即使这可以在 java 中使用其他一些日期时间库,那么它对我也有用。 任何想法/建议如何设置日历的开始日期和结束日期。
【问题讨论】:
有没有办法在 java.util.Calendar 中设置日历开始日期和结束日期。 例如,默认情况下,java.util.Calendar 的开始日期是 1 月 1 日,日历结束日期是 12 月 31 日。我有一些具体情况,我希望日历从 1 月 5 日开始,到 12 月 28 日结束。
即使这可以在 java 中使用其他一些日期时间库,那么它对我也有用。 任何想法/建议如何设置日历的开始日期和结束日期。
【问题讨论】:
正如文档所说,java.util.Calendar 类用于转换特定时刻,而不是表示时间跨度。实际上,与 Java 捆绑在一起的旧日期时间类(例如 java.util.Date 和 .Calendar)缺少任何时间跨度的表示。
此外,这些类是出了名的麻烦和混乱,在设计和实现上都有缺陷。避开他们。使用 Joda-Time 或 Java 8 中内置的新 java.time 包(受 Joda-Time 启发,由 JSR 310 定义)。
Joda-Time 提供了多种定义时间跨度的方法:间隔、周期和持续时间。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime start = new DateTime( 2014, 1, 5, 0, 0, 0, timeZone );
DateTime stop = new DateTime( 2014, 12, 28, 0 , 0, 0, timeZone );
Interval interval = new Interval( start, stop );
boolean containsNow = interval.contains( DateTime.now() );
【讨论】: