JAVA den ersten Tag vom letzen Monat getFirstDayOfLastMonth - oder der Tag von gestern getYesterday

Beispiel - Java Calendar Object - Zeitberechnung

für das folgende Beispiel,
benötigen wir in jedem Falle die JAVA_class: java.util.Calendar
Denn wir arbeiten mit dem Calendar Object.


import java.util.Calendar;
Das primäre Ziel ist es:
den 1. Tag vom letzten Monat zu erhalten.
Oder sekundär einfach den Tag von gestern.

Das klingt zwar simple, ist es aber nicht.
Denn bei beiden Funktionen muss der Jahres- oder Monatswechsel
und sogar das Schaltjahr! mit bedacht werden.

Im ersten Schritt,
generieren wir als String das aktuelle Tagesdatum
mit dem Format YYYYMMDD.

Im zweiten Schritt,
den man sinnvollerweise in einer anderen JAVA Class machen würde,
zerteilen wir den String wieder,
manipulieren diesen im Calendar Objekt
und erhalten unser gewünschtes Datum:
a) vom ersten im letzten Monat
b) oder/und vom Tag gestern

Die ganze Logik ist so aufgebaut,
dass diese später dynamisch in eine Methode (Funktion) genutzt werden kann.

Das aktuelle Tagesdatum mit Calendar-Object im YYYMMDD Format

In der ersten Zeile erzeugen wir eine Instanz vom Calendar Objekt.
Davon erhalten wir die einzelnen Werte für unsere aktuelles Tagesdatum.


Calendar cal = Calendar.getInstance();
String year  = String.valueOf(cal.get(Calendar.YEAR));
String month = String.valueOf(cal.get(Calendar.MONTH)+1);
String day   = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

Ich möchte aber immer das Format YYYYMM00 zurück haben,
also prüfe den Monats- und Tageswert
und bauen so unseren Stringmit YYYYMMDD Format zusammen (siehe Ausgabe von: response.write oder mit System.out.print)

if((cal.get(Calendar.MONTH)+1) < 10) month = "0" + String.valueOf((cal.get(Calendar.MONTH)+1));
else month = String.valueOf((cal.get(Calendar.MONTH)+1));

if(cal.get(Calendar.DAY_OF_MONTH) < 10) day = "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
else day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

if(cal.get(Calendar.HOUR_OF_DAY) < 10) hour = "0" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
else hour = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));

response.write("year:" + year + "|month:" + month + "|day:" + day);
       oder mit
System.out.print("year:" + year + "|month:" + month + "|day:" + day);

Methoden (Funktionen) getFirstDayOfLastMonth - getLastDay - getYesterday

Die obige Funktion würde uns also das aktuelle Tagesdatum mit dem Format YYYYMMDD liefern.
Um unsere 2. Funktion zu testen,
geben wir den aktuellen Datumswert hard-coded vor.
(später im produktiven System sollte das dann alles dynamisch aus der Methode generiert werden)


String yearMonth= "20170122";          //YYYYMMDD Test-Datum hard-coded
int addMonth = -1;                               //unser Monats-Wert zum manipulieren des Tagesdatums

Calendar date;                                   //ein Calendar Object mit dem Namen date
String addedDate = null;                         //das brauchen wir am Ende der Methode um den neue DateString wieder zusammen zu bauen

int year1  = Integer.parseInt(yearMonth.substring(0,4));
int month1 = Integer.parseInt(yearMonth.substring(4,6));
int day1   = Integer.parseInt(yearMonth.substring(6,8));

date = Calendar.getInstance();

zunächst setzen wir das Calendar Object,
auf das aktuelle Datum von heute,
Bzw. das von uns vorgegebene (hard-coded) Datum.

date.set(Calendar.YEAR, year1);
date.set(Calendar.MONTH, month1 - 1);
date.set(Calendar.DAY_OF_MONTH, day1);

Dann wird einfach der Monatswert abgezogen
oder in der zweiten Zeile DAY_OF_MONTH, noch ein beliebiger Tag (der gestriger Tag oder mehr)
Ich habe einfach mal das Beispiel erweitert
mit vorherigem Monats und vorherigen Tag
denn auch bei der Tagesberechnung stolpern wir über den 1. jeden Monats,
wegen dem Monatswechsel, genaus so,
wie beim dem vorherigen Monat im Januar mit dem Jahreswechsel.

date.add(Calendar.MONTH, addMonth);      // Monat(e) vom aktullen datum abziehen
date.add(Calendar.DAY_OF_MONTH, -1);     // Tag(e) vom aktullen datum abziehen

Durch unsere date.add() fuktion ist der Zeiger im Calendar Objekt "date"
nun auch gegebenfalls auf das vorherige Jahr zurück gesprungen.

Also bauen wir unseren String YYYYMMDD wieder neu, von dem berechneten Datum
und fangen links mit dem Year an.

addedDate = String.valueOf(date.get(Calendar.YEAR));

nun den Monat und den Tag zum String dazu

if ( (date.get(Calendar.MONTH)+1) < 10 ) {
      addedDate += "0" + String.valueOf((date.get(Calendar.MONTH)+1));
} else {
      addedDate += String.valueOf((date.get(Calendar.MONTH)+1));
}

//und, bei Bedarf der Tag
if ( (date.get(Calendar.DAY_OF_MONTH)) < 10 ) {
      addedDate += "0" + String.valueOf((date.get(Calendar.DAY_OF_MONTH)));
} else {
      addedDate += String.valueOf((date.get(Calendar.DAY_OF_MONTH)));
}

So einfach haben wir ein Datum
vom vorherigen Monat mit vorherigem Tag erstellt.
Oder einfach, den letzten Monat erhalten
oder einfach, den gestrigen Tag.

hier geben wir das ganze einfach mal aus,
um das Ergebnis zu sehen:

response.write("addedDate:" + addedDate);
         oder mit
System.out.print ("addedDate:" + addedDate);
Eigentlich wollte ich aber: den ersten Tag im letzten Monat - getFirstDayOfLastMonth
hier darf ich nun mal ein wenig hard-coden,
da sich der 1. jeden Monat nicht ändert, er bleibt immer der 1.
und mit Hilfe der Substring funktion,
baue ich mir so zusammen, was genau benötigt wird.
So wie hier den 01. vom letzen Monat (getFirstDayOfLastMonth)

response.write("getFirstDayOfLastMonth:" + addedDate.substring(0,6)+"01");
         oder mit
System.out.print("getFirstDayOfLastMonth:" + addedDate.substring(0,6)+"01");
nun kann man das Spielchen beliebig weiter betreiben
und aus YYYYMMDD String
das eigentlich benötigte Date-Format (Bsp.: DD/MM/YYYY) machen.

noch zur info,
die Bezeichnungen: getFirstDayOfLastMonth & getLastDay & getYesterday
würde ich für die Funktion,
Bzw. wie man in JAVA OOP sagt, als Name der Methode nehmen.
Außerdem sollte die Methode 2 Paramter übergeben können,
welche wir in dem Beispiel manuell (hard-coded) erzeugt haben.

// Hier folgt nun der gesamte JAVA Calendar Code von oben, in den jeweiligen 2 Methoden

public static String getDateTodayYYYYMMDD()
{
                String second, minute, hour;
                Calendar cal = Calendar.getInstance();
                String year  = String.valueOf(cal.get(Calendar.YEAR));
                String month = String.valueOf(cal.get(Calendar.MONTH)+1);
                String day   = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

                if((cal.get(Calendar.MONTH)+1) < 10) month = "0" + String.valueOf((cal.get(Calendar.MONTH)+1));
                else month = String.valueOf((cal.get(Calendar.MONTH)+1));

                if(cal.get(Calendar.DAY_OF_MONTH) < 10) day = "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
                else day = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

                if(cal.get(Calendar.HOUR_OF_DAY) < 10) hour = "0" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
                else hour = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));

                return year + month + day ;

}


public static String getFirstDayOfLastMonth(String yearMonth, int addMonth)
{
                Calendar date;
                String  addedDate = null;

                int year1  = Integer.parseInt(yearMonth.substring(0,4));
                int month1 = Integer.parseInt(yearMonth.substring(4,6));
                int day1   = Integer.parseInt(yearMonth.substring(6,8));

                date = Calendar.getInstance();
                date.set(Calendar.YEAR, year1);
                date.set(Calendar.MONTH, month1 - 1);
                date.set(Calendar.DAY_OF_MONTH, day1);
                date.add(Calendar.MONTH, addMonth);
                date.add(Calendar.DAY_OF_MONTH, -1);

                addedDate = String.valueOf(date.get(Calendar.YEAR));

                if ( (date.get(Calendar.MONTH)+1) < 10 ) {
                        addedDate += "0" + String.valueOf((date.get(Calendar.MONTH)+1));
                } else {
                        addedDate += String.valueOf((date.get(Calendar.MONTH)+1));
                }

                //und, bei Bedarf der Tag
                if ( (date.get(Calendar.DAY_OF_MONTH)) < 10 ) {
                        addedDate += "0" + String.valueOf((date.get(Calendar.DAY_OF_MONTH)));
                } else {
                        addedDate += String.valueOf((date.get(Calendar.DAY_OF_MONTH)));
                }


                return addedDate;
                oder
                return addedDate.substring(0,6)+"01");  // der erste Tag vom letzten Monat
}



Comments

No comments yet.

Add Comment

* Required information
(never displayed)
 
Bold Italic Underline Strike Superscript Subscript Code PHP Quote Line Bullet Numeric Link Email Image Video
 
Smile Sad Huh Laugh Mad Tongue Crying Grin Wink Scared Cool Sleep Blush Unsure Shocked
 
1000
Is it true or false that green is a number?
 
Enter answer:
Captcha
Refresh
 
Enter code:
 
Notify me of new comments via email.
 
Remember my form inputs on this computer.
 
I have read and understand the privacy policy. *
 
I have read and agree to the terms and conditions. *
 
 
Powered by Commentics