为了获得月份的最后日期,我已经写了这个函数
/**
* @param month integer value of month
* @param year integer value of month
* @return last day of month in MM/dd/YYYY format
*/
private static String getDate(int month, int year) {
Calendar calendar = Calendar.getInstance();
// passing month-1 because 0-->jan, 1-->feb... 11-->dec
calendar.set(year, month - 1, 1);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
Date date = calendar.getTime();
DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/YYYY");
return DATE_FORMAT.format(date);
}
对于所有输入,其工作正常,当月份为12月时有一个例外,即getDate(12,2012)返回12/31/2013但它应该返回12/31/2012。 请解释一下行为和解决方案。
答案 0 :(得分:8)
将YYYY
更改为yyyy
DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
YYYY
错误dateformat
答案 1 :(得分:5)
试试这个
calendar.add(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DATE, -1);
Date date = calendar.getTime();
答案 2 :(得分:4)
尝试使用Joda-Time,这更简单:
private static String getLastDayOfMonth(int month, int year) {
LocalDate lastDayOfMonth = new LocalDate(year, month, 1).dayOfMonth().withMaximumValue();
return lastDayOfMonth.toString("MM/dd/yyyy");
}
答案 3 :(得分:3)
private static String getDate(int month, int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
Date date = calendar.getTime();
DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
return DATE_FORMAT.format(date);
}
答案 4 :(得分:2)
YearMonth.of( 2016 , 6 )
.atEndOfMonth()
.toString()
2016年6月30日
使用Java 8及更高版本中内置的java.time类非常容易。 Back-ported to Java 6 & 7,以及adapted to Android。
YearMonth
使用方便的YearMonth
课程。
提示:在代码库周围传递此类的对象,而不仅仅是整数,以便从类型安全,保证有效值和更多自我记录代码中受益。
YearMonth yearMonth = YearMonth.of( 2016 , 6 );
...或...
YearMonth yearMonth = YearMonth.of( 2016 , Month.JUNE );
LocalDate
然后询问当月的最后一天,由LocalDate
代表。
LocalDate endOfMonth = yearMonth.atEndOfMonth();
2016年6月30日
您在上面看到toString
的结果,其中使用标准ISO 8601格式生成了String。您可以使用其他格式。
DateTimeFormatter
课程可以自动翻译成人类语言,并将文化规范应用于诸如句号与逗号或年月日部分的排序等问题。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT );
formatter = formatter.withLocale( Locale.US ); // Re-assign JVM’s current default Locale that was implicitly applied to the formatter.
String output = localDate.format( formatter );
Locale.US
为我们提供了月/日/年格式。您还可以通过调用DateTimeFormatter.ofPattern
来指定显式模式。
答案 5 :(得分:0)
private static String getDate(int month, int year)
{
Calendar dateCal = Calendar.getInstance();
dateCal.set(year, month, 2);
int maxDay = dateCal.getActualMaximum(Calendar.DAY_OF_MONTH);
String pattern = "MMMM";
SimpleDateFormat obDateFormat = new SimpleDateFormat(pattern);
String monthName = obDateFormat.format(dateCal.getTime());
return "Last date of " + monthName + " " + year + " : " + maxDay;
}
答案 6 :(得分:0)
dismissViewControllerAnimated
答案 7 :(得分:0)
您可以使用以下代码获取当月的最后一天
public static String getLastDayOfTheMonth(String date) {
String lastDayOfTheMonth = "";
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
try{
java.util.Date dt= formatter.parse(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dt);
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DATE, -1);
java.util.Date lastDay = calendar.getTime();
lastDayOfTheMonth = formatter.format(lastDay);
} catch (ParseException e) {
e.printStackTrace();
}
return lastDayOfTheMonth;
}
答案 8 :(得分:0)
你在考虑闰年吗?如果没有,那么你可以尝试下面的代码:
public static Date calculateMonthEndDate(int month, int year) {
int[] daysInAMonth = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int day = daysInAMonth[month];
boolean isLeapYear = new GregorianCalendar().isLeapYear(year);
if (isLeapYear && month == 2) {
day++;
}
GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
Date monthEndDate = new Date(gc.getTime().getTime());
return monthEndDate;
}