it-swarm.com.de

Holen Sie sich den letzten Tag des Monats

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. 

23
Anurag Tripathi

YYYY in yyyy ändern 

DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yyyy");  

YYYY ist falsch dateformat

8
rohan kamat

Versuche dies

calendar.add(Calendar.MONTH, month);  
calendar.set(Calendar.DAY_OF_MONTH, 1);  
calendar.add(Calendar.DATE, -1);  

Date date = calendar.getTime();
5
Scary Wombat

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");
}

4
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);
}
3
Elton Wang

tl; dr

YearMonth.of( 2016 , 6 )
         .atEndOfMonth()
         .toString()

2016-06-30

Java.time

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

Zeichenketten

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.

2
Basil Bourque

Versuche dies

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;
}
0
parag.rane
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));
}
0
Zeeshan

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;
    }
0

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;
}
0
Pranav