tl;博士
LocalDate // Represent a date-only, without time-of-day and without time zone.
.now() // Better to pass a `ZoneId` optional argument to `now` as shown below than rely implicitly on the JVM’s current default time zone.
.getDayOfMonth() // Interrogate for the day of the month (1-31).
java.time
现代方法是LocalDate类,用于表示仅日期的值。
时区对于确定当前日期至关重要。 在任何给定时刻,日期都会在全球范围内变化。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.now( z ) ;
int dayOfMonth = ld.getDayOfMonth();
您还可以获取星期几。
DayOfWeek dow = ld.getDayOfWeek();
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的传统日期时间类,例如LocalDate、LocalDate和LocalDate。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参见Oracle教程。 并在Stack Overflow中搜索许多示例和说明。 规格为JSR 310。
使用兼容JDBC 4.2或更高版本的JDBC驱动程序,您可以直接与数据库交换java.time对象。 不需要字符串或java.sql。*类。
在哪里获取java.time类?
Java SE 8,Java SE 9和更高版本内置的
标准Java API的一部分,具有捆绑的实现。
Java 9添加了一些次要功能和修复。
Java SE 6和Java SE 7很多java.time功能都在ThreeTen-Backport中反向移植到Java 6和7。
安卓系统更高版本的Android捆绑了java.time类的实现。
对于较早的Android,ThreeTenABP项目改编了ThreeTen-Backport(如上所述)。 请参阅如何使用ThreeTenABP…。
ThreeTen-Extra项目使用其他类扩展了java.time。 该项目为将来可能向java.time添加内容提供了一个试验场。 您可能会在这里找到一些有用的类,例如LocalDate、LocalDate、LocalDate等。
乔达时代
更新:Joda-Time项目现在处于维护模式,并建议迁移到java.time类。 本节保留完整的历史记录。
使用Joda-Time 2.5库,而不是使用麻烦的java.util.Date和.Calendar类。
时区对于确定日期至关重要。 最好指定区域,而不是隐式依赖分配给JVM的当前默认时区。
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone ).withTimeAtStartOfDay();
int dayOfMonth = now.getDayOfMonth();
或对没有时间部分的LocalDate类使用类似的代码。