[C#] GetWeekOfYear

Pagina: 1
Acties:
  • 307 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:57

mulder

ik spuug op het trottoir

Topicstarter
Ik probeer van een gegeven datum
1) de eerste datum van van de week te bepalen
2) het weeknummer te bepalen

voor de eerste datum van de week:
code:
1
2
3
4
5
6
    DateTime dt = value;
    int today = (int)dt.DayOfWeek - 1; 
    if(today == -1)
        FirstDateOfWeek = dt.AddDays(-6);
    else                    
        FirstDateOfWeek = dt.AddDays(0 - today);

werkt prima, dan de code om weeknummer te bepalen:
code:
1
2
3
4
5
    GregorianCalendar calendar = new GregorianCalendar();
    WeekNumber = 
        calendar.GetWeekOfYear(((DateTime)ViewState["firstdateofweek"]), 
        CalendarWeekRule.FirstFourDayWeek, 
        DayOfWeek.Monday);


Resultaat: alle weken gaan goed, maar ipv week 1 krijg ik week 53, en de week erna keurig week 2. Nu kan ik natuurlijk coden dat als het resultaat week 53 is (en de de week erna 2) er week 1 van gemaakt word, maar ja.. beetje raar natuurlijk. Iemand enig idee?

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

De datum die je opgegeven hebt valt in week 53 van het vorige jaar. Week 1 is NIET automatisch de week waarin 1 januari valt, daar zijn regels voor. (Datepart() in vb documentatie heeft daar vziw iets over).

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Week 1 is geloof ik de week waar de eerste donderdag van het jaar in valt. Er zijn dus regelmatig valide week 53's :)

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Het klopt wat ACM zegt :)
edit:
sorry voor deze nutteloze post, maar ik moet echt heel dringend de HK in :+

Acties:
  • 0 Henk 'm!

Verwijderd

wat ACM zegt klopt als een bus.. das zelfs een ISO standaard

Acties:
  • 0 Henk 'm!

Verwijderd

krek! die donderdag, dat was de info waar ik naar zocht.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 31-07 21:30
ACM schreef op 04 september 2002 @ 12:09:
Week 1 is geloof ik de week waar de eerste donderdag van het jaar in valt. Er zijn dus regelmatig valide week 53's :)
Volgens mij komt dit op hetzelfde neer als de eerste week waarin 4 of meer dagen van in het nieuwe jaar vallen.

Deze optie geeft hij ( CalendarWeekRule.FirstFourDayWeek ) mee, alhoewel mijn .NET kennis nogel te wensen overlaat. ;)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:57

mulder

ik spuug op het trottoir

Topicstarter
yup, dat klopt allemaal (NEN ISO 8601) daar was ik al achter... Mijn vraag is eigenlijk hoe ik dit netjes kan oplossen, want .NET heeft hier duidelijk geen support voor.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

FirstForDayWeek: Indicates that the first week of the year is the first week with four or more days before the designated first day of the week. The value is 2.

Startdag van de week is hier: maandag. Ik weet niet welke datum je wilt converteren die dus week 53 oplevert, maar dan hebben we wat houvast of het hier een bug betreft of correct gedrag :)

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:57

mulder

ik spuug op het trottoir

Topicstarter
De datum die ik gebruik, is steeds de datum van maandag. (Het is de bedoeling door weken te bladeren) Ik probeer zo even steeds elke donderdag op te vragen, maar ik vrees het ergste...

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:57

mulder

ik spuug op het trottoir

Topicstarter
Hmm, dat lijkt te werken. Heel apart dus.
code:
1
2
3
4
    GregorianCalendar calendar = new GregorianCalendar();
    WeekNumber = 
         calendar.GetWeekOfYear(((DateTime)ViewState["firstdateofweek"]).AddDays(3), 
         CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);


Note:
Het blijkt dus dat als je maandag 30 december 2002 opvraagt, je in week 53 zit. Als je donderdag 2 januari 2003 opvraagt, drie dagen later dus, zit je in week 1.

Beetje slordig/buggy....

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

Don Facundo schreef op 04 september 2002 @ 13:17:
Note:
Het blijkt dus dat als je maandag 30 december 2002 opvraagt, je in week 53 zit. Als je donderdag 2 januari 2003 opvraagt, drie dagen later dus, zit je in week 1.
Beetje slordig/buggy....
Nee, dat is precies wat je verwacht! Ma 30 dec valt in week 53 want week 1 is de week waarin minimaal 4 dagen VOOR de startdag van de nieuwe week in vallen. Ma 30 dec en di 31 dec vallen daar niet in, do 2 jan wel weer, want: wo, do, vrij, za, zo zijn 5 dagen voordat maandag de nieuwe week begint. :P

[edit]
Hmmm... dit klopt toch niet idd. want ma en do in dezelfde week hebben verschillende nummers.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:57

mulder

ik spuug op het trottoir

Topicstarter
Hehe, lekker vaag dit. Ik laat het voorloopig maar zo, want het lijkt te werken. Het blijft raar dat .NET van week 53 naar 2 springt.

oogjes open, snaveltjes dicht

Pagina: 1