Centrum Skryptów - Systemy Operacyjny

Jak określić, czy dana godzina dotyczy poranka czy wieczoru? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak określić, czy dana godzina dotyczy poranka czy wieczoru?

Cześć, Skrypciarze! Czy w przypadku określonej godziny można w prosty sposób stwierdzić, czy jest to godzina poranna, czy wieczorna?

-- HG

Cześć, HG. Czy Wy też czujecie to podniecenie, ten nagły przypływ energii i zwiększony poziom adrenaliny? Pewnie nie, bo nawet nie wiecie, o czym myślę. A ja myślami jeszcze jestem w domu, siedzę za stołem i zajadam pysznego indyka. Skąd adrenalina? Mhm, mam w tym zakresie już jakieś doświadczenie i wiem, że coroczny zjazd rodzinny może być bardzo stresujący, ale może też obfitować w mnóstwo przygód, jeżeli się odpowiednio nastawić i wcześniej przygotować. Ja swoje przygotowania zacząłem zaraz po powrocie z Barcelony i rok przez cały zbierałem różne gadżety, żeby uprzyjemnić czas całej rodzinie. Jakie gadżety? Tego niestety nie mogę powiedzieć, to taka słodka rodzinna tajemnica. Każdy umila sobie czas na swój sposób. Jestem pewien, że wszyscy, którzy się do mnie w tym roku zjechali, zapamiętają tegoroczne Święto Dziękczynienia dłużej niż zeszłoroczne. To na pewno. Mogę Wam tylko powiedzieć, że między innymi organizuję zawody i wymyślam najróżniejsze kategorie dla wszystkich przedziałów wiekowych i jak dotąd nie było rannych. Staram się zorganizować wszystko tak, żeby wcale nie wygrywać za każdym razem i przeważnie wszyscy mają równe szanse. Więcej niestety nie mogę powiedzieć.

No może jeszcze, że mam różne strategie przygotowań, a jedną z nich jest skupienie się na pracy i napisanie skryptu określającego, czy podany czas jest czasem porannym, czy wieczornym, chociaż ta strategia jest przeze mnie najrzadziej stosowana; zapewne z uwagi na fakt, iż tak naprawdę przyczynia się tylko do tego, że mogę odpowiedzieć na zadane pytanie. Zatem do roboty, oto oczekiwany skrypt:

dtmTime = #11/21/2007 1:57 PM#



intHour = Hour(dtmTime)



If intHour > 11 Then

    Wscript.Echo "This is an afternoon/evening time."

Else

    Wscript.Echo "This is a morning time."

End If

Dokładnie tak: To bardzo prosty skrypt. (i to naprawdę przypadek, że wybrałem pytanie, na które odpowiedź jest bardzo krótka właśnie dziś, kiedy chcę wyjść z pracy, jak tylko na nie odpowiem.) Skrypt rozpoczyna się od przypisania wartości daty i godziny do zmiennej o nazwie dtmTime; na wypadek, gdyby ktoś się zastanawiał, znaki (#) otaczające wartość informują skrypt VBScript, że ma do czynienia z wartością daty i godziny, a nie z jakimś innym rodzajem wartości:

dtmTime = #11/21/2007 1:57 PM#

Zatem jak stwierdzić, czy chodzi o godzinę po przedpołudniową (czyli przed 12:00 w południe) lub popołudniową/wieczorną (czyli po 12:00 w południe)No cóż, można to zrobić w całkiem prosty sposób; w końcu na końcu tej wartości dołączony jest znacznik PM. Ale skąd skrypt ma wiedzieć, czy jest to godzina poranna czy wieczorna?

Właśnie stąd:

intHour = Hour(dtmTime)

Za pomocą funkcji Hour pobieramy z naszej wartości część dotyczącą godziny. Funkcja Hour przekazuje nam wartość całkowitą z zakresu od 0 do 23, reprezentującą godzinę w formacie 24-godzinnym; w naszym przykładowym skrypcie oznacza to, że otrzymamy 13 (ponieważ w formacie 24-godzinnym, 1:57 PM to odpowiednik 13:57). Teraz wystarczy określić, czy otrzymana wartość godziny jest większa niż 11:

If intHour > 11 Then

Jeżeli tak jest (czyli jeżeli godzina znajduje się w zakresie od 12 do 23 włącznie) wywołujemy echo informacji, że mamy do czynienia z czasem popołudniowym/wieczornym. Jeżeli tak nie jest (czyli jeżeli godzina znajduje się w zakresie od 0 do 11 włącznie) wywołujemy echo informacji, że mamy do czynienia z czasem porannym. Tylko tyle.

Ciekawą rzeczą w tym podejściu jest to, że jest ono skuteczne niezależnie od używanego przez nas formatu językowego. Przykładowo, załóżmy, że przypisaliśmy wartość daty i godziny do zmiennej dtmTime za pomocą poniższego wiersza kodu:

dtmTime = FormatDateTime(#11/21/2007 13:57#, vbShortTime)

Dzięki funkcji FormatDateTime, w tym przypadku zmienna dtmTime będzie miała wartość 13:57; na końcu tej wartości nie znajdziemy już PM. Nic nie szkodzi, nasz skrypt nie kieruje się znacznikiem AM/PM; zamiast tego pobiera godzinę (13) i idzie dalej.

I to już wszystko, ja wracam do moich ekscytujących wspomnień z dnia poprzedniego.

 Do początku strony Do początku strony

Centrum Skryptów - Systemy Operacyjny