tl;博士
myUtilDate.toInstant() // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
.atZone( // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object.
ZoneId.of( "America/Montreal" ) // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMonthValue() // Extract a month number. Returns a `int` number.
java.time详情
Ortomala Lokni 的The Answer 使用java.time 是正确的。您应该使用 java.time,因为它是对旧 java.util.Date/.Calendar 类的巨大改进。请参阅 java.time 上的Oracle Tutorial。
我将添加一些代码来展示如何使用 java.time 而无需考虑 java.util.Date,以供您开始使用新代码时使用。
简而言之,使用 java.time...Instant 是 UTC 时间线上的一个时刻。应用时区 (ZoneId) 以获取 ZonedDateTime。
Month 类是一个复杂的enum,通常代表一个月。该枚举具有方便的方法,例如获取本地化名称。请放心,java.time 中的月份数字是正常的 1-12,而不是 java.util.Date/.Calendar 中的从零开始的废话 (0-11)。
要获取当前日期时间,time zone 至关重要。在任何时候,世界各地的日期都不相同。因此,如果接近月底/月初,世界各地的月份就不一样了。
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth();
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。