如何从Date对象(java.util.Date
)获取整数作为整数?
答案 0 :(得分:267)
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
答案 1 :(得分:39)
You can also use the java.time package in Java 8 and convert your java.util.Date
object to a java.time.LocalDate
object and then just use the getMonthValue()
method.
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();
Note that month values are here given from 1 to 12 contrary to cal.get(Calendar.MONTH)
in adarshr's answer which gives values from 0 to 11.
But as Basil Bourque said in the comments, the preferred way is to get a Month
enum object with the LocalDate::getMonth
method.
答案 2 :(得分:13)
如果你使用 Java 8 日期api,你可以直接把它放在一行!
LocalDate today = LocalDate.now();
int month = today.getMonthValue();
答案 3 :(得分:7)
//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))
...或...
int month = dateTime.getMonthOfYear();
答案 4 :(得分:5)
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
详细信息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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 5 :(得分:3)
如果你不能使用Joda时间,你仍然生活在黑暗的世界:)(Java 5或更低版本)你可以享受这个:
注意:请确保您的日期已经完成,格式为:dd / MM / YYYY
/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
return Integer.parseInt(dateFormat.format(date));
}
/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
return Integer.parseInt(dateFormat.format(date));
}
答案 6 :(得分:0)
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1
返回值从0开始,因此您应该在结果中添加一个。