Powershell: Sprawdzenie czy data to sobota lub niedziela

25-Kwi-2017

Załóżmy, że w swoim skrypcie potrzebujesz rozpoznać, czy dany dzień jest dniem wolnym (sobota lub niedziela) czy roboczym… Proste!

No i świetnie. Wynikiem może na przykład być:

Hmmm, ale czy aby zawsze? Na komputerze z polskimi ustawieniami regionalnymi może zostać zwrócone:

Jeśli chcesz sprawdzić czy dzień jest niedzielą czy sobotą czy innym dniem tygodnia lepszym wyborem byłoby korzystanie z jakiejś wartości liczbowej, gdzie np Niedziela to 0, Poniedziałek to wtorek itp. Da sie coś takiego zrobić. Zrzutuj właściwość DayOfWeek do [int]:

W moim przypadku (wtorek) zwracana wartość to 2. Czy jednak nie będzie tak, że zależnie od ustawień kultury, 0 będzie oznaczać Niedzielę, a w innych warunkach Poniedziałek? Otóż nie!. Jak czytamy na

https://msdn.microsoft.com/pl-pl/library/system.datetime.dayofweek(v=vs.110).aspx

The value of the constants in the DayOfWeek enumeration ranges from DayOfWeek.Sunday to DayOfWeek.Saturday. If cast to an integer, its value ranges from zero (which indicates DayOfWeek.Sunday) to six (which indicates DayOfWeek.Saturday).

The DayOfWeek property returns an enumerated constant; it does not reflect a system’s regional and language settings. To retrieve a string representing a localized weekday name for a particular date, call one of the overloads of the ToString method that includes a format parameter and pass it either the ddd or dddd custom format strings. For details, see How to: Extract the Day of the Week from a Specific Date.

A więc niezależnie od ustawień językowych, regionalnych itp. 0 to zawsze Niedziela a 6 to zawsze Sobota. Wartość stałych można sprawdzić wpisując:

Wynik to oczywiście

Jeśli wiec trzeba sprawdzić czy data jest weekendowa wykonaj:

Dodaj komentarz:

Autor: Rafał Kraik