11.01.2025

Hafta numaraları

Türkiye'de çok kullandığımız birşey olmasa da yılın içinde kaçıncı hafta olduğumuz bilgisi bazen faydalı olabiliyor. Powershell'de bu işi doğrudan Get-Date'i formatlayarak yapabiliriz:

Get-Date -UFormat %V

İlk haftanın hangisi olacağı ölçütü var. Bazı kültürlerde yılın ilk haftası olarak ilk tam hafta (FirstFullWeek), diğerlerinde yılın ilk gününün olduğu hafta (FirstDay) ötekilerde ise ilk 4 veya daha günlük hafta (FirstFourDayWeek) olarak kabul edilir [1].

Türkçe Windows'da bunu öğrenmenin yolu:

$kultur = Get-Culture
$kultur.DateTimeFormat.CalendarWeekRule

FirstDay

Yani yılın ilk gününün olduğu hafta bizde yılın ilk haftası kabul ediliyor. 1 Ocak Pazar bile olsa ertesi gün 2 Ocak bizim için yılın ikinci haftası. Değiştirmek mi istiyoruz? Olur [2, 3]:

$kulturBilgisi = [System.Globalization.CultureInfo]::InvariantCulture
$takvim = $kulturBilgisi.calendar
$takvimYilinIlkHaftasi = [System.Globalization.CalendarWeekRule]::FirstFourDayWeek
$haftaninIlkGunu = [System.DayOfWeek]::Sunday
$suAn = Get-Date
$haftaNo = $takvim.GetWeekOfYear($suAn, $takvimYilinIlkHaftasi, $haftaninIlkGunu)
"ISO 8601 standardına göre hafta numarası: $weekNumber"

Bu satırlar da yılın ilk haftasının en az 4 günü olan bir hafta olması ve haftanın ilk günün Pazar olması kuralına göre hesaplar.

Eski günlerden kalma güzel bir çalışma da Scripting Guy'a ait.

2025-11-03 Ek: Farkettim ki bu yöntem pazartesi ve salı günleri için farklı hafta numaraları dönüyor. Biraz inceleyince benzer şikayetlerin olduğunu gördüm. Çözüm olarak şöyle bir fonksiyon kullanılabilir:

function Get-ISOWeekNumber {
    param([DateTime]$Date = (Get-Date))
   
    $cal = [System.Globalization.CultureInfo]::InvariantCulture.Calendar
    return $cal.GetWeekOfYear($Date, [System.Globalization.CalendarWeekRule]::FirstFourDayWeek, [DayOfWeek]::Monday)
}

İlave bilgi olarak, sistemde haftanın ilk günü olarak hangi gün kabul ediliyor bilgisi için:

Get-Culture | Select-Object -ExpandProperty DateTimeFormat | Select-Object FirstDayOfWeek 

 

Hiç yorum yok: