Java:GregorianCalendar的最大值和最小值是什么/在哪里?

时间:2010-03-06 15:39:50

标签: java calendar gregorian-calendar

GregorianCalendar的最大值和最小值是什么?

它们是否像Integer.MAX_VALUE一样,或者可能是GregorianCalendar.get(BLAH)?

简而言之,如何创建具有最小/最大值的GregorianCalendar实例?

4 个答案:

答案 0 :(得分:5)

这应该有效:

GregorianCalendar maxgc = new GregorianCalendar();
maxgc.setTime(new Date(Long.MAX_VALUE));

GregorianCalendar mingc = new GregorianCalendar();
mingc.setTime(new Date(Long.MIN_VALUE));

答案 1 :(得分:5)

我接受了joekutner的建议并将其用于:

GregorianCalendar gCal = new GregorianCalendar( );

gCal.setTime(new Date(Long.MIN_VALUE));
System.out.println( "Min Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));

gCal.set( Calendar.SECOND, 3 );
System.out.println( "Min Date less 1 second is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));

gCal.setTime(new Date(Long.MAX_VALUE));
System.out.println( "Max Date is " + gCal.getTime() + " " + gCal.get(Calendar.ERA));


Min Date is Sun Dec 02 16:47:04 GMT 292269055 0
Min Date less 1 second is Sun Aug 17 07:12:54 GMT 292278994 1
Max Date is Sun Aug 17 07:12:55 GMT 292278994 1

其中显示了最小值和最大值,并且它们之间是一个指示,如果您尝试在最小值之前移动到第二个,那么会发生什么 - 您可以回滚。

这是版本1.6.0_17。

答案 2 :(得分:4)


您可以尝试为每种类型的字段(即年,月等)调用Calendar.getMinimum(),然后在相应的字段类型上设置这些最小值。这将为您提供最低日历。我不知道是否有更快的方法。

答案 3 :(得分:1)

其他答案可能是正确的,但使用过时的类。

java.time

旧的日期时间类(java.util.Date/.Calendar等)已被Java 8及更高版本中内置的java.time框架取代。

java.time类的灵感来自Joda-Time,由JSR 310定义,由ThreeTen-Extra项目扩展,后端移植到Java 6& 7由ThreeTen-Backport项目完成,并在ThreeTenABP项目中适用于Android。请参阅Tutorial

UTC的时间轴上片刻nanoseconds,请使用Instant。给定offset-from-UTC后,请使用OffsetDateTime。对于time zone(偏移+异常规则),请使用ZonedDateTime,但其性质没有定义的最小值/最大值,ZoneId也没有。对于没有时间且没有时区的仅限日期的值,请使用LocalDate。对于没有日期且没有时区的仅限时间的值,请使用LocalTime。对于没有时区的日期时间,请使用LocalDateTime

以下是所有预定义的常量。

警告:警惕将这些值用作某种旗帜或特殊含义。许多其他软件库和数据库可能不支持这些极端值。

对于一个标志或特殊含义,例如非空“无可用值”,我建议选择一个随意的时刻,但要避免在时间上向后或向前进入这样的极端。也许是Unix epoch reference date,1970年的第一个时刻,UTC,1970-01-01T00:00:00Z。在Java中定义为常量:Instant.EPOCH

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore