webentwicklung-frage-antwort-db.com.de

Wie bekomme ich das erste Datum und das letzte Datum des vorherigen Monats? (Java)

Mit dem heutigen Datum sollte ich das erste Datum und das letzte Datum des vorherigen Monats erhalten. Ich kann keine Logik finden. 

Beim Übergeben von 05/30/2012 sollte ich beispielsweise 04/01/2012 und 04/30/2012 erhalten.

Jede Hilfe wird sehr geschätzt. Vielen Dank.

Mit Calendar

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DATE, 1);
Date firstDateOfPreviousMonth = cal.getTime();

cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal

Date lastDateOfPreviousMonth = cal.getTime();

Siehe

29
Jigar Joshi

tl; dr

YearMonth.now().minusMonths( 1 ).atDay( 1 )

…und…

YearMonth.now().minusMonths( 1 ).atEndOfMonth()

Vermeiden Sie j.u.Date

Vermeiden Sie die gebündelten Java.util.Date- und .Calendar-Klassen, da diese bekanntermaßen lästig sind. Verwenden Sie stattdessen das Java.time-Paket in Java 8 und höher.

Java.time

Das neue Java.time-Framework in Java 8 ( Tutorial ) enthält hierfür Befehle.

Die treffend benannte YearMonth -Klasse stellt einen Monat eines Jahres ohne einen bestimmten Tag oder eine bestimmte Uhrzeit dar. Von dort aus können wir nach dem ersten und letzten Tag des Monats fragen.

ZonedId zoneId = ZoneId.of( "America/Montreal" );
YearMonth yearMonthNow = YearMonth.now( zoneId );
YearMonth yearMonthPrevious = yearMonthNow.minusMonths( 1 );
LocalDate firstOfMonth = yearMonthPrevious.atDay( 1 );
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth();

Joda-Zeit

UPDATE: Das Projekt Joda-Time befindet sich jetzt im Wartungsmodus . Das Team empfiehlt die Migration zu den Klassen Java.time . Siehe Tutorial von Oracle .

Verwenden Sie in Joda-Time 2.8 die Klasse LocalDate, wenn Sie sich nicht um die Uhrzeit kümmern. 

LocalDate today = LocalDate.now( DateTimeZone.forID( "Europe/Paris" ) );
LocalDate firstOfThisMonth = today.withDayOfMonth( 1 );
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths( 1 );
LocalDate endOfLastMonth = firstOfThisMonth.minusDays( 1 );

Über Java.time

Das Java.time - Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen die störenden alten legacy -Date-Time-Klassen wie Java.util.Date , Calendar , & SimpleDateFormat .

Das Projekt Joda-Time , jetzt im Wartungsmodus , empfiehlt die Migration zu den Java.time -Klassen.

Weitere Informationen finden Sie unter Oracle Tutorial . Durchsuchen Sie den Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR 310 .

Sie können Java.time-Objekte direkt mit Ihrer Datenbank austauschen. Verwenden Sie einen JDBC-Treiber , der mit JDBC 4.2 oder höher kompatibel ist. Keine Zeichenfolgen, keine Java.sql.*-Klassen erforderlich.

Wo erhalten Sie die Java.time-Klassen? 

Das Projekt ThreeTen-Extra erweitert Java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von Java.time. Hier finden Sie nützliche Klassen wie Interval , YearWeek , YearQuarter und more .

6
Basil Bourque

Verwenden Sie JodaTime

DateMidnight now = new DateMidnight();
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1);
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1);
System.out.println(beginningOfLastMonth);
System.out.println(endOfLastMonth);

Ausgabe:

2012-04-01T00: 00: 00.000 + 02: 00
2012-04-30T00: 00: 00.000 + 02: 00

Erläuterung: Ein DateMidnight-Objekt ist ein Date-Objekt ohne Tageszeitinformationen. Dies scheint genau das zu sein, was Sie benötigen. Falls nicht, ersetzen Sie alle Vorkommen von DateMidnight durch DateTime im obigen Code.

3

nun, Sie könnten ein Kalenderobjekt erstellen, das Datum auf den ersten Tag des aktuellen Monats setzen (sollte der erste sein: P) und dann können Sie zwei Vorgänge ausführen: von Ihrem Kalenderobjekt können Sie eine bestimmte Periode abziehen der Zeit, z ein Monat (dies würde Ihnen den ersten Tag des vorherigen Monats oder einen Tag geben, der Ihnen den letzten Tag des vorherigen Monats angibt. Ich habe es nicht probiert, aber dies wäre meine ersten Schritte.

2
tagtraeumer

Möchte auch Jigar's Antwort etwas hinzufügen. Verwenden Sie die DateFormat-Klasse, um das Datum in dem Format zu erhalten, das Sie in der Frage angegeben haben:

DateFormat df = DateFormat.getInstance(DateFormat.SHORT);
System.out.println(df.format(firstDateOfPreviousMonth));
System.out.println(df.format(lastDateOfPreviousMonth));

Ausgabe:

04/01/12
04/30/12
1
WickeD
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 1);
    cal.add(Calendar.DAY_OF_MONTH, -1);
    Date lastDateOfPreviousMonth = cal.getTime();
    cal.set(Calendar.DATE, 1);
    Date firstDateOfPreviousMonth = cal.getTime();
0
i88.ca
    public List customizeDate(String month, int year) {
        List<String> list = new ArrayList<String>();
        try {
            String edates = null;
            String sdates = null;
            if (month.equals("JAN") || month.equals("MAR") ||
                month.equals("MAY") || month.equals("JUL") ||
                month.equals("AUG") || month.equals("OCT") ||
                month.equals("DEC")) {
                String s1 = "01";
                String s2 = "31";

                String sdate = s1 + "-" + month + "-" + year;
                System.out.println("Startdate" + sdate);
                SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
                Date ed = sd.parse(sdate);
                sdates = sd.format(ed);
                System.out.println("ed" + ed + "------------" + sdates);
                String endDate = s2 + "-" + month + "-" + year;
                System.out.println("EndDate" + endDate);
                SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
                Date d = s.parse(endDate);
                edates = s.format(d);
                System.out.println("d" + d + "------------" + edates);
            } else if (month.equals("APR") || month.equals("JUN") ||
                       month.equals("SEP") || month.equals("NOV")) {
                String s3 = "01";
                String s4 = "30";
                String sdate = s3 + "-" + month + "-" + year;
                System.out.println("Startdate" + sdate);
                SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
                Date ed = sd.parse(sdate);
                sdates = sd.format(ed);
                System.out.println("ed" + ed + "------------" + sdates);
                String endDate = s4 + "-" + month + "-" + year;
                System.out.println("EndDate" + endDate);
                SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
                Date d = s.parse(endDate);
                edates = s.format(d);
                System.out.println("d" + d + "------------" + edates);
            } else {
                if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
                    System.out.println("Leap year");
                    if (month.equals("FEB")) {
                        String s5 = "01";
                        String s6 = "29";
                        String sdate = s5 + "-" + month + "-" + year;
                        System.out.println("Startdate" + sdate);
                        SimpleDateFormat sd =
                            new SimpleDateFormat("dd-MMM-yyyy");
                        Date ed = sd.parse(sdate);
                        sdates = sd.format(ed);
                        System.out.println("ed" + ed + "------------" +
                                           sdates);
                        String endDate = s6 + "-" + month + "-" + year;
                        System.out.println("EndDate" + endDate);
                        SimpleDateFormat s =
                            new SimpleDateFormat("dd-MMM-yyyy");
                        Date d = s.parse(endDate);
                        edates = s.format(d);
                        System.out.println("d" + d + "------------" + edates);
                    }
                } else {
                    System.out.println("Not a leap year");
                    String s7 = "01";
                    String s8 = "28";
                    String sdate = s7 + "-" + month + "-" + year;
                    System.out.println("Startdate" + sdate);
                    SimpleDateFormat sd = new SimpleDateFormat("dd-MMM-yyyy");
                    Date ed = sd.parse(sdate);
                    sdates = sd.format(ed);
                    System.out.println("ed" + ed + "------------" + sdates);
                    String endDate = s8 + "-" + month + "-" + year;
                    System.out.println("EndDate" + endDate);
                    SimpleDateFormat s = new SimpleDateFormat("dd-MMM-yyyy");
                    Date d = s.parse(endDate);
                    edates = s.format(d);
                    System.out.println("d" + d + "------------" + edates);
                }
            }
            list.add(edates);
            list.add(sdates);
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
        return list;
    }
}
0
vyshnavi