JAVA使用GregorianCalendar类获取当前年月日,怎么运行出来少一个月呢??现在是五月,运行出来是四月

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA使用GregorianCalendar类获取当前年月日,怎么运行出来少一个月呢??现在是五月,运行出来是四月相关的知识,希望对你有一定的参考价值。

求大神,奖励有点少,因为我也不多。见谅

用该系统类运行出来的月数的起始是从零开始计算的,就是说1月份用0表示,12月份用11表示
所以你要以中文正常显示,就必须加1,建议看一下《java核心技术——基础篇》这本书,里面有很多详解。

纯手打,非copy,望采纳
参考技术A 貌似要在后面+1。

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

【中文标题】Java:GregorianCalendar 的最大值和最小值是啥/在哪里?【英文标题】:Java: What/where are the maximum and minimum values of a GregorianCalendar?Java:GregorianCalendar 的最大值和最小值是什么/在哪里? 【发布时间】:2011-01-24 11:33:09 【问题描述】:

公历日历的最大值和最小值是多少?

它们是像 Integer.MAX_VALUE 这样的常量,还是 GregorianCalendar.get(BLAH)?

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

【问题讨论】:

【参考方案1】:

这应该可行:

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

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

【讨论】:

很遗憾,您的解决方案不起作用。在 mingc.setTime(new Date(Long.MIN_VALUE)) 之后,你会得到: migc.get(Calendar.YEAR) == 292269055 或类似这样的东西。对我来说,这听起来不像是一分钟:-)。 谢谢 =D 我只是使用这些值进行比较,所以我很好,但对于其他人来说,这可能值得一提。来自 setTime() 文档:注意:使用 Date(Long.MAX_VALUE) 或 Date(Long.MIN_VALUE) 调用 setTime() 可能会从 get() 中产生不正确的字段值。 pajton,检查一下:migc.get(Calendar.ERA) 0 表示 BC 1 表示 AD 所以年份 292269055 对应于 292269055 BC 对。这实际上很聪明;-) 最好使用new Date(0) 作为最短日期。【参考方案2】:

我接受了 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。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

java.time

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

java.time 类的灵感来自 Joda-Time,由 JSR 310 定义,由 ThreeTen-Extra 项目扩展,由 ThreeTen-Backport 项目向后移植到 Java 6 和 7,并在ThreeTenABP 项目。见Tutorial。

在UTC 的时间线上,分辨率为nanoseconds,请使用Instant。给定offset-from-UTC,使用OffsetDateTime。对于time zone(偏移量+异常规则),使用ZonedDateTime,但本质上没有定义最小值/最大值,ZoneId 也没有。对于没有时间和时区的仅日期值,请使用LocalDate。对于不带日期和不带时区的仅时间值,请使用LocalTime。对于没有时区的日期时间,请使用LocalDateTime

以下都是预定义的常量。

Instant.MIN-1000000000-01-01T00:00ZInstant.MAX = 1000000000-12-31T23:59:59.999999999Z OffsetDateTime.MIN = -999999999-01-01T00:00:00+18:00OffsetDateTime.MAX = +999999999-12-31T23:59:59.999999999-18:00 LocalDate.MIN = -999999999-01-01LocalDate.MAX = +999999999-12-31 LocalTime.MIN = 00:00LocalTime.MAX = 23:59:59.999999999 LocalDateTime.MIN = -999999999-01-01T00:00:00LocalDateTime.MAX = +999999999-12-31T23:59:59.999999999 Year.MIN_VALUE = -999,999,999Year.MAX_VALUE = +999,999,999 ZoneOffset.MIN = -18:00(但实际上是-12:00ZoneOffset.MAX = +18:00(但实际上是+14:00

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

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


关于java.time

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

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

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。

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

从哪里获得 java.time 类?

Java SE 8Java SE 9Java SE 10 及更高版本 内置。 标准 Java API 的一部分,带有捆绑实现。 Java 9 添加了一些小功能和修复。 Java SE 6Java SE 7 ThreeTen-Backport 中的大部分 java.time 功能都向后移植到 Java 6 和 7。 Android java.time 类的 Android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuarter 和more。

【讨论】:

以上是关于JAVA使用GregorianCalendar类获取当前年月日,怎么运行出来少一个月呢??现在是五月,运行出来是四月的主要内容,如果未能解决你的问题,请参考以下文章

请问这个java类(GregorianCalendar )的一个方法?

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

java-闰年的判断 GregorianCalendar

java 日历和GregorianCalendar

java中GregorianCalendar类与Calendar类的关系与区别?

java中GregorianCalendar类返回当前年月日怎么和现实差了1个月