Week_of_year

a_l_e_x

Mitglied
Hoffe ich bin hier richtig.

Vermisse diese Eigenschaft in er JavaME Version WEEK_OF_YEAR in der Klasse "Calendar". Wollte einen Kalender in einer Liste anzeigen und dazu die passende Kalenderwoche.
Gibts noch ne Möglichkeit oder weiß jemand ob man das Irgendwie errechnen kann?

Vielen Dank für eure Antworten.
 

The_S

Top Contributor
Ganz primitiv: Vom aktuellen Datum immer eine Woche abziehen, bis du im Vorjahr bist. So oft wie du abziehen musst, die so vielte Woche ist es im Jahr. Aber aufpassen, du musst noch beachten, ob Anfang Januar schon die erste Woche im neuen Jahr, oder noch die letzte Woche im alten Jahr ist.

Geht ggf. auch effektiver, habe die Methoden von Calendar nicht im Kopf.
 

a_l_e_x

Mitglied
Danke das ist schon mal viel wert.
Hab rausgefunden das die erste Woche im Jahr dadurch definiert wird das sie mindesten die ersten 4 Tage des Jahres hat. Dies läßt sich sicher berechnen, muss ich die nächsten Tage mal den Kopf anstrengen.

Ne Möglichkeit ie Orginal Klasse von Java SE zu übernehme nach ME gibts siche nicht oder ?
 

XHelp

Top Contributor
kannst du denn auf die Nummer des Tages seit 01.01 zugreifen? Dann kannst du ja die Zahl durch 7 dividieren... kriegst schon eine ungefähre Vorstellung. Dannach noch abgleichen wo du dich in der aktuellen Woche befindest und wie die 1. Woche des Jahres aussieht.
 

The_S

Top Contributor
Danke das ist schon mal viel wert.

Bitte

Hab rausgefunden das die erste Woche im Jahr dadurch definiert wird das sie mindesten die ersten 4 Tage des Jahres hat.

korrekt


Dies läßt sich sicher berechnen, muss ich die nächsten Tage mal den Kopf anstrengen.

Ja, du schaust dir an, was für ein Wochentag (Montag, Dienstag, Mittwoch, ...) der 1.1. war und guckst dann, wie viele Tage es noch bis zum nächsten Wochenanfang sind ;) .


Ne Möglichkeit ie Orginal Klasse von Java SE zu übernehme nach ME gibts siche nicht oder ?

Du müsstest auch alle Abhängigkeiten dieser Klasse, die es so nicht in Java ME gibt (was viele sein sollten ;) ) mitkopieren. Und kA ob du das rechtlich überhaupt darfst.
 

a_l_e_x

Mitglied
hab mal ein bisschen rumprobiert, und dies so gemacht.
funktioniert gegen meine Erwartung auch bei einem Sonntag.

könnte mann bestimmt nochmal kürzen.
Vieleicht könnte ja mal jemand drüber gucken ob das so richtig ist.

Java:
       // BeispielDatum 
        Calendar ca1 = Calendar.getInstance();
        ca1.set(Calendar.DAY_OF_MONTH , 24) ;
        ca1.set(Calendar.MONTH , 11) ;
        ca1.set(Calendar.YEAR , 2006) ;

        //der 1.1. des gewählten Jahres
        Calendar cf = Calendar.getInstance();
        cf.set(Calendar.DAY_OF_MONTH , 1) ;
        cf.set(Calendar.MONTH , 0) ;
        cf.set(Calendar.YEAR ,(ca1.get(Calendar.YEAR))) ;

        int erstewoche = 1;

        if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.MONDAY )
        {
	//1.1.2010 ist in der Kalenderwoche 1
            erstewoche=1;
        }
         else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.TUESDAY   )
        {
                //1.1.2010 ist in der Kalenderwoche 1
             erstewoche=1;
        }
         else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.WEDNESDAY   )
        {
                //1.1.2010 ist in der Kalenderwoche 1
             erstewoche=1;
        }
         else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.THURSDAY   )
        {
                //1.1.2010 ist in der Kalenderwoche 1
             erstewoche=1;
        }
         else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.FRIDAY   )
        {
                //1.1.2010 ist in der Kalenderwoche 52/53
             erstewoche=0;
        }
         else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.SATURDAY   )
        {
                //1.1.2010 ist in der Kalenderwoche 52/53
             erstewoche=0;
        }
        else if (cf.get(Calendar.DAY_OF_WEEK )==Calendar.SUNDAY  )
        {
                //1.1.2010 ist in der Kalenderwoche 52/53
            erstewoche=0;
        }
          //Aktuelles Datum auf passenden Wochentag(des 1.1.) hochrechnen
         int diff = cf.get(Calendar.DAY_OF_WEEK )-ca1.get(Calendar.DAY_OF_WEEK );
         ca1.set(Calendar.DAY_OF_MONTH,ca1.get(Calendar.DAY_OF_MONTH)+diff);
         // Unterschied in Millisec zwischen dem
         //1.1. und dem selben Wochentag der aktuellen Woche.
        long millis = ca1.getTime().getTime()-cf.getTime().getTime();

        // sekunden / Minuten / Stunden / Tage / Wochen
        long wochen = millis/1000/60/60/24/7;

        int kw = (int)wochen + erstewoche;
        System.out.println (kw);
 
J

JohannisderKaeufer

Gast
Java:
switch(cf.get(Calendar.DAY_OF_WEEK )){
case Calendar.MONDAY:
case Calendar.TUESDAY:
case Calendar.WEDNESDAY:
case Calendar.THURSDAY:
erstwoche=1;
break;
default: 
erstewoche=0
}

oder gibt es kein switch in ME.

Ob es richtig ist, erfährst du nur durch testen.

In welcher Woche liegt ein Freitag, der 1.1?
In welcher Woche liegt ein Samstag, der 1.1?
In welcher Woche liegt ein Sonntag, der 1.1?

In der 0ten Woche oder in der letzten des Vorjahres.
Und was kommt in deinem Programm raus.

Außerdem würde ich beim setzen des 1.1 des Jahres, das Datum bis auf die Millisekunde auf 0:00:00:000 setzen.

Wenn du dein Programm um 19:00 Uhr startest und einen Calendereintrag mit einer Uhrzeit vor 19:00 Uhr und an einem Montag übergibst, meine ich das du mit dieser Implementierung in der Woche um 1 nach Hinten verrückst.
 

The_S

Top Contributor
Ohne mir jetzt deine Lösung angesehen zu haben, geht das hier noch besser
Java:
switch(cf.get(Calendar.DAY_OF_WEEK )){
case Calendar.MONDAY:
case Calendar.TUESDAY:
case Calendar.WEDNESDAY:
case Calendar.THURSDAY:
erstwoche=1;
break;
default: 
erstewoche=0
}
Java:
erstewoche=1;
switch(cf.get(Calendar.DAY_OF_WEEK )){
case Calendar.FRIDAY:
case Calendar.SATURDAY:
case Calendar.SUNDAY:
erstwoche=0;
}
 

Neue Themen


Oben