Arbeitstage eines Monats herausfinden

Status
Nicht offen für weitere Antworten.
F

Flow25

Gast
Hallo zusammen,

für meine Anwendung benötige ich eine Funktion mit der ich die Arbeitstage (Mo-Fr) eines Monats feststellen kann.
Natürlich kann man dies umständlich über eine Schleife und das Abfragen des Wochentages der Klasse Calendar bzw. GregorianCalendar machen. Aber ich frage mich ob es da nicht eine vorgefertigte Java-Funktion für gibt??

Kann mir da jemand weiterhelfen??

Gruß Flow25
 

Campino

Top Contributor
Ich glaube , außer der

Code:
Kristallkugel.getWhatTheProgrammerWant();

gibt es da keineFunktion für.
 

Sky

Top Contributor
Campino hat gesagt.:
Ich glaube , außer der

Code:
Kristallkugel.getWhatTheProgrammerWant();

gibt es da keineFunktion für.

Scheint nicht ganz zu funktionieren, da kommt eine Fehlermeldung
Code:
cannot resolve symbol: variable Kristallkugel in class Test at line 18, column 4
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
 
F

Flow25

Gast
Ok ;), wie kann ich das Ganze denn mit GregorianCalendar oder Calendar lösen?

Gruß Flow25
 

mic_checker

Top Contributor
Im Prinzip hast du dir die Antwort ja schon selbst gegeben, zumindest eine mögliche:
Du gehst die einzelnen Tage durch und schaust ob es sich dabei um einen Montag ... Freitag handelt.

Code:
        GregorianCalendar cal = new GregorianCalendar(2005,3,1);
        int c=(cal.get(GregorianCalendar.DAY_OF_WEEK));
        switch (c)
        {
        case GregorianCalendar.MONDAY:
            System.out.println("MO");
            break;

        case GregorianCalendar.TUESDAY:
            System.out.println("DI");
            break;
        case GregorianCalendar.WEDNESDAY:
            System.out.println("MI");
            break;
        case GregorianCalendar.THURSDAY:
            System.out.println("DO");
            break;
        case GregorianCalendar.FRIDAY:
            System.out.println("FR");
            break;
        default:
            break;
        }

Somit prüfst du ob ein Tag ein Mo-Fr ist, musst dann nur noch weiter gehen....gab schon genug Threads zu GregorianCalendar
 
F

Flow25

Gast
Also sorry aber der Link hilft mir nicht wirklich weiter. Dort wird mit einer komplexen Formel der Ostersonntag berechnet. Wie soll ich damit oder mit dessen Hilfe die Anzahl der Arbeitstage eines Monats berechnen ??

Gruß Flow25
 

P3AC3MAK3R

Top Contributor
Es reicht ja nicht, die Anzahl der Wochentage (Mo - Fr) zu summieren. Von der Summe müssen ja auch noch die Feiertage abgezogen werden. Daher vermutlich der Ostersonntag-Link. ;)
 

mic_checker

Top Contributor
Das stimmt natürlich, aber ich ging mal davon aus das er das hinkriegt zusammen mit dem Link von DP direkt oben drüber ;)
 
F

Flow25

Gast
@mic_checker: Danke, aber eine kleine Frage habe ich noch:

Die Tage des gewählten Monats müssen ja in einer Schleife durchlaufen werden.
In der Schleife müsste dann die von dir beschriebene Abfrage des Wochentages stattfinden und falls es ein Arbeitstag ist ein Zähler plus eins gesetzt werden. Die Frage ist jedoch wie kann ich die Tage des Monats in einer Schleife durchgehen, ohne zu wissen, wieviele Tage der Monat insgesamt beinhaltet.

Wie finde ich raus, wieviele Tage ein Monat besitzt?

Gruß Flow25
 

mic_checker

Top Contributor
Probiers mal damit:

Code:
 GregorianCalendar cal = new GregorianCalendar(2005, GregorianCalendar.MARCH, 1);
    
int days = cal.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);
 

DP

Top Contributor
Code:
int anzahl_tage = new GregorianCalendar(TimeZone.getTimeZone("ECT")).getActualMaximum(Calendar.DAY_OF_MONTH)
 
F

Flow25

Gast
Ok, das mit den Wochenenden funktioniert. Leider bekomme ich auch mit Hilfe des Links nicht das Berechnen von Feiertagen hin.
Hat jemand noch ein Beispiel wie man ein GregorianCalendar-Object daraufhin überprüft ob es ein Feiertag ist??

Gruß Flow25
 
F

Flow25

Gast
Ich verstehe nicht woher er das GregorianCalendar-Object bekommt. Das Ganze scheint ja irgendwie ne Klasse vom Typ GregorianCalendar zu sein (wegen dem Super()).
Wie würde denn die gesamte Klasse inklusive Methode isFeiertag() aussehen??

P.S.: Mein Code sieht bisher so aus:


Code:
int month1 = MonatUmwandeln(monatA.getSelectedItem().toString());
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.MONTH, month1 - 1);
cal.set(Calendar.YEAR, Integer.parseInt(jahrA.getSelectedItem().toString()));
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//int days = new GregorianCalendar(TimeZone.getTimeZone("ECT")).getActualMaximum(Calendar.DAY_OF_MONTH);
int zaehl = 0;
int Arbeitstage = 0;
while(zaehl <= days)
{
    GregorianCalendar gc = new GregorianCalendar(Integer.parseInt(jahrA.getSelectedItem().toString()), month1, zaehl);
    int wochentag = gc.get(Calendar.DAY_OF_WEEK);
    if (wochentag != gc.SATURDAY && wochentag != gc.SUNDAY)
    {
        //AN DIESER STELLE MÜSSTE ABGEFRAGT WERDEN OB gc EIN FEIERTAG IST, ÜBER isFeiertag()	
        if (isFeiertag(gc) == true)
        {
            Arbeitstage = Arbeitstage + 1;
        }
    }
}
System.out.println("Tage des Monats: " + days);

Gruß Flow25
 
F

Flow25

Gast
Hallo? Also ich habe die Methode jetzt folgendermaßen umgeschrieben:

Code:
private boolean isFeiertag(GregorianCalendar gc) 
	{ 
	    int jahr = gc.get(Calendar.YEAR); 
	  
	    int a = jahr % 19; 
	    int b = jahr % 4; 
	    int c = jahr % 7; 
	    int monat = 0; 
	  
	    int m = (8 * (jahr / 100) + 13) / 25 - 2; 
	    int s = jahr / 100 - jahr / 400 - 2; 
	    m = (15 + s - m) % 30; 
	    int n = (6 + s) % 7; 
	  
	    int d = (m + 19 * a) % 30; 
	  
	    if (d == 29) 
	      d = 28; 
	    else if (d == 28 && a >= 11) 
	      d = 27; 
	  
	    int e = (2 * b + 4 * c + 6 * d + n) % 7; 
	  
	    int tag = 21 + d + e + 1; 
	  
	    if (tag > 31) 
	    { 
	      tag = tag % 31; 
	      monat = 3; 
	    } 
	    if (tag <= 31) 
	      monat = 2; 
	  
	    GregorianCalendar gc_ostersonntag = new GregorianCalendar(jahr, monat, tag); 
	    GregorianCalendar gc_ostermontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 1)); 
	    GregorianCalendar gc_karfreitag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) - 2));    
	    GregorianCalendar gc_rosenmontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) - 48)); 
	    GregorianCalendar gc_christihimmelfahrt = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 39)); 
	    GregorianCalendar gc_pfinstsonntag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 49)); 
	    GregorianCalendar gc_pfinstmontag = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 50)); 
	    GregorianCalendar gc_frohnleichnahm = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), gc_ostersonntag.get(Calendar.MONTH), (gc_ostersonntag.get(Calendar.DATE) + 60)); 
	    GregorianCalendar gc_wiedervereinigung = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 9, 1); 
	    GregorianCalendar gc_weihnachten_1 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 24); 
	    GregorianCalendar gc_weihnachten_2 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 25); 
	    GregorianCalendar gc_weihnachten_3 = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 26); 
	    GregorianCalendar gc_silvester = new GregorianCalendar(gc_ostersonntag.get(Calendar.YEAR), 11, 31); 
	    GregorianCalendar gc_neujahr = new GregorianCalendar(gc_silvester.get(Calendar.YEAR), 0, 1); 

	    if(gc_ostermontag.equals(this) || gc_karfreitag.equals(this) || gc_rosenmontag.equals(this) || gc_christihimmelfahrt.equals(this) || gc_pfinstmontag.equals(this) || gc_frohnleichnahm.equals(this) || gc_weihnachten_1.equals(this) || gc_weihnachten_2.equals(this) || gc_weihnachten_3.equals(this) || gc_silvester.equals(this) || gc_neujahr.equals(this) || gc_wiedervereinigung.equals(this)) 
	    { 
	      return true; 
	    } 
	    else 
	    { 
	      return false; 
	    } 
	    
	    
	  }

Mein Problem ist nun an der Stelle if(gc_ostermontag.equals(this) || gc_karfreitag.equals(this) || ... .

Was wird hier mit this abgefragt?? Was muss statt this bei mir stehen??

Gruß Flow25
 

DP

Top Contributor
anstatt this muss da dein übergebenes objekt rein.

meine methode war aus einer klasse, welche die gregoriancalendar-klasse erbt.
 
F

Flow25

Gast
Ok, habe das Ganze jetzt mal mit Januar 2004 getestet. Hier war z.B. der 1. Januar ein Donnerstag, müsste also als Feiertag erkannt werden. Leider gibt mir mein Programm 22 Arbeitstage aus, was den 1. Januar mit einschließt.

Woran liegt das??

P.S.: Meine Codes habt ihr ja prinzipiell schon.

Gruß Flow25
 
F

Flow25

Gast
@DP: Sag mal kann es sein, dass du in deiner Ostersonntags-Berechnung Fehler hast.
Aufgefallen ist mir auf jeden Fall, dass du statt dem 03.10 den 01.10 als Tag der dt. Einheit festgelegt hast.
Außerdem wird der Ostersonntag nicht korrekt berechnet. Für 2004 kommt z.B. der 11.03 statt dem 11.04 heraus.

Könntest du bitte den Fehler bei der Berechnung des Ostersonntages aufdecken?
Ich weis nämlich nicht ob der Fehler an der Stelle:

Code:
if (tag > 31) 
{ 
      tag = tag % 31; 
      monat = 3; 
} 
if (tag <= 31) 
      monat = 2;

liegt oder irgendwo in deinen Berechnungs-Formeln...

Gruß Flow25
 
R

Roar

Gast
sky80 hat gesagt.:
Campino hat gesagt.:
Ich glaube , außer der

Code:
Kristallkugel.getWhatTheProgrammerWant();

gibt es da keineFunktion für.

Scheint nicht ganz zu funktionieren, da kommt eine Fehlermeldung
Code:
cannot resolve symbol: variable Kristallkugel in class Test at line 18, column 4
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

maaaahn kein wunder, du hast ja auch nich die JProphet API installiert :?
 

DP

Top Contributor
naja, dadurch dass die einheit erst am 03.10. war wird es deutschland auch nicht schlagartig besser gehen ;)

musste halt den gc_einheit auf einen anderen tag setzen...

wann letztes jahr ostern war kann ich auch nicht sagen, habe keinen alten kalender hier.

geh halt alle links durch aus dem besagten post, dann wirste fündig.

ich schaue nachher nochmal wenn ich nen anderen kalender habe.

cu
 
F

Flow25

Gast
Hallo zusammen,

kann mir vielleicht jemand helfen den Buß und Bettag eines Jahres zu berechnen.
Der Buß und Bettag fällt auf den Mittwoch vor dem Sonntag vor dem ersten Adventssonntag. Offensichtlich ist, dass der erste Adventssonntag drei Wochen vor dem vierten Adventssonntag liegt. Der vierte Adventssonntag wiederum ist der Sonntag vor dem 25. Dezember eines Jahres.

Kann man das irgendwie mit GregorianCalendar lösen??

Angefangen habe ich ja schon:

GregorianCalendar gc_buss = new GregorianCalendar();
gc_buss.set(Calendar.YEAR, gc_ostersonntag.get(Calendar.YEAR));
gc_buss.set(Calendar.MONTH, 11);
gc_buss.set(Calendar.DATE, 25);

Mir fehlen nun noch die Berechnung des Ganzen.

Gruß Flow25
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Berechnung der Arbeitstage in einem Zeitraum Java Basics - Anfänger-Themen 9
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
J Farbe des Striches eines TitledBorders ändern Java Basics - Anfänger-Themen 2
pc pc pc pc pc letztes Element eines Arrays n Java Basics - Anfänger-Themen 3
walid Öffnungszeiten eines Geschäftes Java Basics - Anfänger-Themen 3
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
U Eigenschaft eines JTextfiels per ActionListener ändern... Java Basics - Anfänger-Themen 2
B Synchronisation eines kleinen Museums Java Basics - Anfänger-Themen 47
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
Sachinbhatt Was ist die Notwendigkeit eines Sammlungsframeworks in Java? Java Basics - Anfänger-Themen 2
N Textdatei aus Resourcen-Ordner eines Projekts/ jar-file lesen Java Basics - Anfänger-Themen 4
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
D Inhalt eines Arrays ausgeben Java Basics - Anfänger-Themen 7
A Jedes zweite Element eines Arrays entfernen Java Basics - Anfänger-Themen 30
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
J Größe eines Strings in Pixel Java Basics - Anfänger-Themen 18
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
J Hinzufügen eines Objektes in ein Objekt-Array Java Basics - Anfänger-Themen 62
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
M Wie erreiche ich das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 2
M Wie erreiche ich es das Vorwärtsgehen eines Roboters? Java Basics - Anfänger-Themen 0
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
A Optimierung eines Programms: Mergen der Dateien Java Basics - Anfänger-Themen 23
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
A Java, verarbeitung eines xml-files Java Basics - Anfänger-Themen 2
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
P Drei Zahlen eines Würfelspiels auswerten Java Basics - Anfänger-Themen 7
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
C Überprüfen eines Programms auf Syntaxfehler Java Basics - Anfänger-Themen 3
S Wie kann ich den Bereich eines Integers begrenzen? Java Basics - Anfänger-Themen 2
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
B Downgrade eines bestehenden Projektes Java Basics - Anfänger-Themen 5
amelie123456 Geschwindigkeit der Methode bewegeDich eines Objekts ändern Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Z Rückgabe eines Values in umgekehrte richtung Java Basics - Anfänger-Themen 5
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
M Benutzereingabe eines Codes verbessern Java Basics - Anfänger-Themen 3
B Modulo-Operator anhand eines Beispieles erklären Java Basics - Anfänger-Themen 7
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
Kawastori Größe eines Arrays bestimmen Java Basics - Anfänger-Themen 13
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
A Teilarrays eines 2D-Arrays sortieren Java Basics - Anfänger-Themen 4
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
C Wie kann ich Versionen eines Projektes in Eclipse erstellen? Java Basics - Anfänger-Themen 3
yoskaem Text Color durch Klicken eines Buttons in anderer Activity ändern Java Basics - Anfänger-Themen 2
A Teilen eines Arrays Java Basics - Anfänger-Themen 5
DorFey Sortieren eines mehrdimensionalen Arrays Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
R Löschen und ausgeben eines Teilbaums Java Basics - Anfänger-Themen 3
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
M Hilfe bei Strukturierung eines Buchungssystems Java Basics - Anfänger-Themen 3
M Erstellen eines insets Objekts, GridBagLayout Java Basics - Anfänger-Themen 13
M Rückgabe eines Arrays Java Basics - Anfänger-Themen 10
Z Erste Schritte Indexe innerhalb eines Arrays zusammensählen Java Basics - Anfänger-Themen 14
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
A Freie Stelle eines Arrays Java Basics - Anfänger-Themen 17
C Erstellen eines Widerstandsnetzwerks Java Basics - Anfänger-Themen 10
C Methode Seiten tauschen eines erstellten Rechtecks mit Seite A und B Java Basics - Anfänger-Themen 9
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
F Berechnung der Rektaszension und Deklination eines Sterns Java Basics - Anfänger-Themen 7
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
M Hinzufügen eines Objekts auf ein Map Java Basics - Anfänger-Themen 4
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
S Ersetzen eines Asterix in einem String Java Basics - Anfänger-Themen 8
M Struktur eines Fotobuches Java Basics - Anfänger-Themen 6
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
X Modellieren eines Buchungssystems für Busfahrkarten Java Basics - Anfänger-Themen 53
T Prüfung auf Existenz eines Dialogfensters Java Basics - Anfänger-Themen 5
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
M Erstellen eines Stacks Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben