PowerShell Quirks: Happy New ISO8601 Year!

Ein frohes neues Jahr allerseits!

Es gibt solche und solche Jahre im .NET-land. In Deutschland sind wir ja gewohnt, unsere beruflichen Dinge in Wochennummern zu regeln. Und so hat der eine oder andere auch mal Skripte geschrieben, die mit Wochennummern oder KWs hantieren, zumal man sie ja sehr einfach bekommt:

Get-Date -UFormat '%V'

Doch manchmal ist man dann etwas verwirrt:
Welche Woche haben wir denn nun an diesem 01.01.2021? KW53 oder KW01? Der ISO8601-Standard, dem auch Outlook folgt, sagt (in einem Zitat bei Wikipedia):

The last week of the ISO week-numbering year, i.e. W52 or W53, is the week before W01 of the next year. This week’s properties are:
– It has the year’s last Thursday in it.
– It is the last week with a majority (4 or more) of its days in December.
– Its middle day, Thursday, falls in the ending year.
– Its last day is the Sunday nearest to 31 December.
– It has 28 December in it.

Also fällt das Neujahr in die KW53, und die KW01 beginnt mit dem Montag, 04.01.2021.

Für alle, die das Ausmaß der Misere interessiert, hier ein Skriptschnipsel. Einfach kopieren und ausführen:

Write-Host "First Day of week in this culture: $((Get-Culture).DateTimeFormat.FirstDayOfWeek)`n" -ForegroundColor Cyan
(-7..16) + (353..374) | Foreach-Object {
    $date = (Get-Date '01.01.2021').AddDays($_)
    if ($date.DayOfWeek -eq (Get-Culture).DateTimeFormat.FirstDayOfWeek) {
        Write-Host ' '
        $col = 'Cyan'
    } else {
        $col = 'Gray'
    }
    Write-Host ('{0} {1} KW{2}' -f (Get-Date $date -Format 'yyyy-MM-dd'), $date.DayOfWeek.ToString().PadRight(10,' '), (Get-Date $date -UFormat '%V').PadLeft(2,'0')) -ForegroundColor $col
}

Man sieht: ’nächstes Jahr wird alles gut‘ gilt auch in 2021 noch nicht, zumindest in Bezug auf die Wochennummern in .NET 🙂

Happy week planning!

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.