# Week_of_year



## a_l_e_x (11. Okt 2010)

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 (12. Okt 2010)

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 (12. Okt 2010)

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 (12. Okt 2010)

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.


----------



## a_l_e_x (12. Okt 2010)

ne leider nicht, kann nur den Tag der Woche oder Tag des Monats abfragen


----------



## The_S (13. Okt 2010)

a_l_e_x hat gesagt.:


> Danke das ist schon mal viel wert.



Bitte



a_l_e_x hat gesagt.:


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



korrekt




a_l_e_x hat gesagt.:


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




a_l_e_x hat gesagt.:


> 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 (16. Okt 2010)

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. 


```
// 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);
```


----------



## JohannisderKaeufer (18. Okt 2010)

```
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 (18. Okt 2010)

Ohne mir jetzt deine Lösung angesehen zu haben, geht das hier noch besser


JohannisderKaeufer hat gesagt.:


> ```
> switch(cf.get(Calendar.DAY_OF_WEEK )){
> case Calendar.MONDAY:
> case Calendar.TUESDAY:
> ...




```
erstewoche=1;
switch(cf.get(Calendar.DAY_OF_WEEK )){
case Calendar.FRIDAY:
case Calendar.SATURDAY:
case Calendar.SUNDAY:
erstwoche=0;
}
```


----------

