Um das letzte Datum des Monats zu erhalten, habe ich diese Funktion geschrieben
/**
* @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);
}
bei allen Eingaben funktioniert es mit einer Ausnahme, wenn der Monat Dezember ist, d. h. getDate (12, 2012) gibt den 31.12.2013 zurück, sollte aber den 31.12.2012 zurückgeben.
YYYY
in yyyy
ändern
DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");
YYYY
ist falsch dateformat
Versuche dies
calendar.add(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.DATE, -1);
Date date = calendar.getTime();
Verwenden Sie Joda-Time , es ist einfacher:
private static String getLastDayOfMonth(int month, int year) {
LocalDate lastDayOfMonth = new LocalDate(year, month, 1).dayOfMonth().withMaximumValue();
return lastDayOfMonth.toString("MM/dd/yyyy");
}
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);
}
YearMonth.of( 2016 , 6 )
.atEndOfMonth()
.toString()
2016-06-30
Sehr einfach mit den in Java 8 und höher integrierten Java.time - Klassen. Zurück zu Java 6 & 7 und weiter angepasst an Android .
YearMonth
Verwenden Sie die praktische Klasse YearMonth
.
Tipp: Übergeben Sie Objekte dieser Klasse nicht um ganze Zahlen, sondern um Ihre Codebasis, um von der Typsicherheit, garantierten gültigen Werten und mehr selbstdokumentierendem Code zu profitieren.
YearMonth yearMonth = YearMonth.of( 2016 , 6 );
…oder…
YearMonth yearMonth = YearMonth.of( 2016 , Month.JUNE );
LocalDate
Fragen Sie dann nach dem letzten Tag dieses Monats, dargestellt durch LocalDate
.
LocalDate endOfMonth = yearMonth.atEndOfMonth();
2016-06-30
Das Ergebnis von toString
sehen Sie oben, wo ein String mit der Standardformatierung ISO 8601 generiert wurde. Sie können andere Formatierungen verwenden.
Die DateTimeFormatter
-Klasse kann automatisch in eine menschliche Sprache übersetzen und kulturelle Normen auf Themen wie Punkt oder Komma oder die Anordnung von Teilen von Jahr zu Monat anwenden.
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 );
Der Locale.US
gibt uns ein Format von Monat/Tag/Jahr. Sie können auch ein explizites Muster angeben, indem Sie DateTimeFormatter.ofPattern
aufrufen.
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;
}
With Java 8 DateTime / LocalDateTime :
private static String getDate(int month, int year) {
Month monthObj = Month.of(month);
LocalDate date = LocalDate.of(year, month, monthObj.maxLength());
return date.format(DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US));
}
Sie können den folgenden Code verwenden, um den letzten Tag des Monats abzurufen
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;
}
Erwägen Sie auch hier ein Schaltjahr? Wenn nicht, dann können Sie folgenden Code ausprobieren:
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;
}