Weblog @ rebex.cz

Weblogy na webu Rebexu
Welcome to Weblog @ rebex.cz Sign in | Help
in Search

Weblog @ Rebex.cz :: Honza Šotola

nepravidelné poznámky .NET vývojáře

Číslování týdnů v .NETu

V letošním roce je (opět) patrné, že .NET používá jiné číslování týdnů, než je standardizováno v České republice.
Upozornil nás na to klient, jehož aplikace letos používala čísla týdnů o jedno vyšší, než podle papírového kalendáře, přestože vloni fungovala správně.

 

Jak to má být:

V ČR se pro reprezentaci času používá (stejně jako ve většine Evropy) norma ISO 8601 (v ČR převzatá jako ČSN ISO 8601) a podle té je první týden v roce takový, který obsahuje 4. leden.

 

Jak to je:

Číslo týdne pro zvolené datum se v .NETu získá metodou
Calendar.GetWeekOfYear(datum, weekRule, firstDayOfWeek).
Instanci třídy Calendar získáme např. z CultureInfo.CurrentCulture.Calendar.

Problém je právě v tom, odkud dodat hodnotu parametrů weekRule (pravidlo pro číslování týdnů). Rozumné by bylo převzít ho z aktuálního regionálního nastavení, tedy z
CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule.
Bohužel, ta pro českou kulturu (cs-CZ) vrací hodnotu FirstDay (tedy číslování se začíná v týdnu, který obsahuje první leden).

Tedy zápis

CultureInto.CurrentCulture.Calendar.GetWeekOfYear(
  datum,
  CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule,
  CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek).

nevrátí číslo týdne, platné v ČR.

 

Jak to řešit:

Natvrdo (resp. po ověření, že aktuální CultureInfo je české) používat hodnotu CalendarWeekRule.FirstFourDayWeek.

Správné číslo týdne tedy vrátí výraz

CultureInto.CurrentCulture.Calendar.GetWeekOfYear(
  datum,
  CalendarWeekRule.FirstFourDayWeek,
  CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)

 

Poznámka:

Podobně se chová (ve výchozím nastavení) i český MS Outlook 2007.
I zde lze ale přepnout na pravidlo číslování týdnů přes
Nástroje/Možnosti/Možnosti kalendáře/První týden roku: "První týden se 4 dny"

Published 27. ledna 2010 8:48 by honzas

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(optional)
(required) 
Submit
Powered by Community Server (Personal Edition), by Telligent Systems