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开始,所以你应该添加一个结果。