Java:从date获取整数月份
如何从Date对象( java.util.Date
)中获取整数作为整数?
java.util.Date date= new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(date); int month = cal.get(Calendar.MONTH);
java.time
您也可以在Java 8中使用java.time包 ,并将java.util.Date
对象转换为java.time.LocalDate
对象,然后使用getMonthValue()
方法。
Date date = new Date(); LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int month = localDate.getMonthValue();
请注意,在这里给出的月份值从1到12,与接受的答案中的cal.get(Calendar.MONTH)
相反,它给出了从0到11的值。
但是正如Basil Bourque在评论中所说的那样,首选的方法是使用LocalDate::getMonth
方法得到一个Month
枚举对象。
乔达时间
或者,使用Joda-Time DateTime
类。
//convert date to datetime DateTime datetime = new DateTime(date); int month = Integer.parseInt(datetime.toString("MM"))
…要么…
int month = dateTime.getMonthOfYear();
如果你使用java 8的dateAPI,你可以直接把它在一行! LocalDate today = LocalDate.now(); int month = today.getMonthValue();
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" ) ) .getMonthValue() // Extract a month number.
java.time
详细信息
Ortomala Lokni 回答使用java.time是正确的。 而且您应该使用java.time,因为它比旧的java.util.Date/.Calendar类有巨大的改进。 请参阅关于java.time的Oracle教程 。
我将添加一些代码,展示如何使用java.time而不考虑java.util.Date,因为当您开始使用新的代码时。
简而言之就是使用java.time … Instant
是UTC时间轴上的一个时刻。 应用时区( ZoneId
)来获取ZonedDateTime
。
Month
类是一个复杂的枚举来代表一个月的一般情况。 该枚举有方便的方法,如获得本地化的名称。 请放心,java.time中的月份数是1-12,而不是java.util.Date/.Calendar中的基于零的废话(0-11)。
要获得当前的date时间, 时区是至关重要的。 在任何时候,世界各地的date都不一样。 因此,如果在月末或月初附近,这个月的情况就不一样了。
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 5或更低版本),你可以享受这个:
PS:请确保您的date是由格式: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)); }
Date mDate = new Date(System.currentTimeMillis()); mDate.getMonth() + 1
返回的值从0开始,所以你应该添加一个结果。