webentwicklung-frage-antwort-db.com.de

java erhält das erste Datum und das letzte Datum des angegebenen Monats und des angegebenen Jahres

Ich versuche das erste Datum und das letzte Datum des angegebenen Monats und Jahres zu erhalten. Ich habe folgenden Code verwendet, um das letzte Datum im Format yyyyMMdd zu erhalten. Aber konnte dieses Format nicht bekommen. Auch dann möchte ich das Startdatum im selben Format haben. Ich arbeite noch daran. Kann mir jemand bei der Korrektur des untenstehenden Codes helfen? 

public static Java.util.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);
    Java.util.Date monthEndDate = new Java.util.Date(gc.getTime().getTime());
    return monthEndDate;
}

public static void main(String[] args) {
    int month = 3;
    int year = 2076;
    final Java.util.Date calculatedDate = calculateMonthEndDate(month, year);
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
    format.format(calculatedDate);
    System.out.println("Calculated month end date : " + calculatedDate);
} 
10
user1514499

Um das Startdatum zu erhalten  

    GregorianCalendar gc = new GregorianCalendar(year, month-1, 1);
    Java.util.Date monthEndDate = new Java.util.Date(gc.getTime().getTime());
    System.out.println(monthEndDate);

(Note: im Startdatum der Tag = 1)

für die formatierten 

SimpleDateFormat format = new SimpleDateFormat(/////////add your format here);
System.out.println("Calculated month end date : " + format.format(calculatedDate));
5
Alya'a Gamal

Java.time.YearMonth

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

Die entsprechend benannte Klasse YearMonth repräsentiert einen Monat eines Jahres ohne einen bestimmten Tag oder eine bestimmte Uhrzeit. Von dort können wir den ersten Tag und die Tage des Monats anfordern.

YearMonth yearMonth = YearMonth.of( 2015, 1 );  // January of 2015.
LocalDate firstOfMonth = yearMonth.atDay( 1 );
LocalDate last = yearMonth.atEndOfMonth();

Über Java.time

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

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

Weitere Informationen finden Sie unter Oracle Tutorial . Durchsuchen Sie den Stack Overflow nach vielen Beispielen und Erklärungen. Die 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 Notwendigkeit für Zeichenfolgen, keine Notwendigkeit für Java.sql.*-Klassen.

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 mehr .

12
Basil Bourque
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.format(calculatedDate);
System.out.println("Calculated month end date : " + calculatedDate);

Ändern Sie es in

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formattedDate =  format.format(calculatedDate);
System.out.println("Calculated month end date : " + formattedDate);

Für mehr Details

http://docs.Oracle.com/javase/1.5.0/docs/api/Java/text/DateFormat.html#format(Java.util.Date )

Ein anderer Ansatz

package com.shashi.mpoole;

import Java.text.SimpleDateFormat;
import Java.util.Calendar;
import Java.util.Date;
import Java.util.GregorianCalendar;

public class DateMagic {

    public static String PATTERN = "yyyyMMdd";


    static class Measure
    {
        private int month;
        private int year;
        private Calendar calendar;

        public Measure() {
            // TODO Auto-generated constructor stub
            init();

        }

        private void init() {
            // TODO Auto-generated method stub
             calendar = Calendar.getInstance();
             calendar.set(year, month, 1);

        }

        public String min()
        {
            return format(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        }

        public String max()
        {
            return format(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        }

        private Date date(GregorianCalendar c)
        {
            return new Java.util.Date(c.getTime().getTime());

        }

        private GregorianCalendar gc(int day)
        {
            return new GregorianCalendar(year, month, day);
        }


        private String format(int day) {

             SimpleDateFormat format = new SimpleDateFormat(PATTERN);
             return format.format(date(gc(day)));
        }

        public Measure month(int month) {
            // TODO Auto-generated method stub
            this.month = month -1 ;
            return this;
        }

        public Measure year(int year) {
            // TODO Auto-generated method stub
            this.year = year;
            return this;
        }
    }



    public static void main(String[] args) {

        Measure measure = new Measure().month(3).year(2076);
        System.out.println(measure.max());
        System.out.println(measure.min());
    } 


}
5
Shashi

Sie können einfach die Kalender-Klasse verwenden. Sie sollten Monatvariable den Monat zuweisen, den Sie möchten

        Calendar gc = new GregorianCalendar();
        gc.set(Calendar.MONTH, month);
        gc.set(Calendar.DAY_OF_MONTH, 1);
        Date monthStart = gc.getTime();
        gc.add(Calendar.MONTH, 1);
        gc.add(Calendar.DAY_OF_MONTH, -1);
        Date monthEnd = gc.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");

        System.out.println("Calculated month start date : " + format.format(monthStart));
        System.out.println("Calculated month end date : " + format.format(monthEnd));
5
ttn

Erster Tag:  

Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH);

Letzter Tag des Monats:

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
4

Versuchen Sie den Code für den letzten Tag des Monats unter: -

Calendar c = Calendar.getInstance();      
c.set(2012,3,1); //------>  
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));  

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
System.out.println(sdf.format(c.getTime())); 

http://www.coderanch.com/t/385759/Java/java/date-date-month

4
duggu
        GregorianCalendar gc = new GregorianCalendar(year, selectedMonth-1, 1);
           Java.util.Date monthStartDate = new Java.util.Date(gc.getTime().getTime());
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(monthStartDate);
        calendar.add(calendar.MONTH, 1);
        calendar.add(calendar.DAY_OF_MONTH, -1);
           Java.util.Date monthEndDate = new Java.util.Date(calendar.getTime())
2
Gururaj Enamate

Obwohl dies nicht genau die Antwort auf die OP-Frage ist, werden die folgenden Methoden angegeben: aktueller Monat erstes und letztes Datum als Java 8+ LocalDate-Instanzen).

public static LocalDate getCurrentMonthFirstDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).withDayOfMonth(1);
}

public static LocalDate getCurrentMonthLastDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).plusMonths(1).withDayOfMonth(1).minusDays(1);
}

Randnotiz: Durch die Verwendung von LocalDate.ofEpochDay(...) anstelle von LocalDate.now() wird die Leistung erheblich verbessert. Auch die Verwendung des Millis-in-a-Day-Ausdrucks anstelle des Endwerts 86400000 Ist leistungsfähiger. Ich dachte anfangs, letzteres würde besser abschneiden als der Ausdruck: P

Warum diese Antwort?: Dies ist immer noch keine korrekte Antwort auf die OP-Frage, aber ich beantworte sie hier immer noch, da Google diese Frage angezeigt hat, als ich nach 'Java 8 get' gesucht habe Monatsbeginn ':)

1
manikanta
public static Date[] getMonthInterval(Date data) throws Exception {

    Date[] dates = new Date[2];

    Calendar start = Calendar.getInstance();
    Calendar end = Calendar.getInstance();

    start.setTime(data);
    start.set(Calendar.DAY_OF_MONTH, start.getActualMinimum(Calendar.DAY_OF_MONTH));
    start.set(Calendar.HOUR_OF_DAY, 0);
    start.set(Calendar.MINUTE, 0);
    start.set(Calendar.SECOND, 0);

    end.setTime(data);
    end.set(Calendar.DAY_OF_MONTH, end.getActualMaximum(Calendar.DAY_OF_MONTH));
    end.set(Calendar.HOUR_OF_DAY, 23);
    end.set(Calendar.MINUTE, 59);
    end.set(Calendar.SECOND, 59);

    //System.out.println("start "+ start.getTime());
    //System.out.println("end   "+ end.getTime());

    dates[0] = start.getTime();
    dates[1] = end.getTime();

    return dates;
}
0
Daniele Rucci