Ale od początku. Zacznijmy od czasu sprzętowego. Z angielska Real Time Clock lub CMOS clock. Jest on ustawiony w naszym biosie. Czas ten ustawiamy z palca lub też system operacyjny stosownie go modyfikuje zapisując "właściwy". Oznacza to, że czas sprzętowy i czas systemowy, czyli ten odmierzany przez nasz software, mogą być różne. Czasami jest to źródłem nieporozumień. Jeżeli jest jeden system on zawsze wie jaki ustawić czas systemowy względem czasu sprzętowego. W przypadku wielu systemów może się okazać, że procedury ustawiania czasu są różne.
Przyjęła się taka umowa, że niezmienny jest czas uniwersalny UTC. Pozostałe czasy, mowa o czasach lokalnych, wyznaczane są w relacji do UTC z uwzględnieniem offsetu wynikającego z oddalenia od położenia zerowego. Tą samą konwencję stosują systemy unixowe - w tym (Mac) OS X, Linuksy i BSD. Czas sprzętowy z założenia jest czasem UTC. Czas systemowy jest czasem UTC z uwzględnieniem offsetu.
Do tej zasady nie stosują się windowsy. Czas jest zawsze czasem lokalnym. Przyjmijmy, że warszawskim. Warszawa jest w strefie czasowej UTC +1.
Co to oznacza w konsekwencji? Odpalamy windowsa mamy właściwy czas. Odpalamy na tym samym sprzęcie inny system unixowy - czas jest inny z dokładnością do godziny, dwóch w zależności od pory roku (a zmiana czasu ze względu na porę roku, to kolejna frustracja).
W linuksach zmiana standardu, czyli założenie, że czas sprzętowy jest czasem lokalnym, jest rzeczą bardzo prostą. Wystarczy w zbiorze (tekstowym)
/etc/default/rcS
dopisać linijkęUTC=no
System startując traktuje czas sprzętowy jako czas lokalny. Zegar pokazuje właściwą godzinę. Uruchamiając i pracując z windowsami i Linuksem (Debianem, Ubuntu, Fedorą itp) w obu systemach mamy właściwy czas.
W przypadku Linuksów niewłaściwy czas nie jest problemem, o ile włączona jest usługa NTP (Network Time Protocol) automatycznego ustawiania czasu. Jest ona aktywna niezwłocznie po uzyskaniu połączenia z Internetem. Nawet jeżeli wystartujemy z niewłaściwym czasem, za chwilę zegarek zostanie skorygowany. Z windowsami gorzej. Harmonogram usługi NTP ustawiony jest inaczej. Windowsy z definicji korygują czas raz na tydzień.
Jak można zauważyć, przestawienie Linuksa na czas sprzętowy lokalny jest banalnie proste. Czy równie proste jest przestawienie windowsów na czas sprzętowy uniwersalny UTC? Tak na prawdę sprawa została zauważona i skorygowana dopiero w siódemce. Trzeba odpowiednio zmodyfikować rejestr. służy do tego polecenie
regedit
. Definiujemy rejestrHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal
typu
DWORD
o wartości (hex) równej 1.To samo możemy uzyskać definiując plik tekstowy *.reg (wpisujemy cokolwiek zamiast *) zawierający następujący tekstWindows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
Podwójne kliknięcie na ten zbiór spowoduje dopisanie wskazanego wyżej rejestru.
Funkcjonalność ta działa także w XP, jakkolwiek nie jest udokumentowana.
klucz RealTimeIsUniversal w rejestrze windows xp |
Co więcej znany jest błąd ustawiania złej wartości czasu po hibernacji. Z mojego doświadczenia wynika, że ustawienie to działa dobrze, chociaż czasami fiksuje pokazując czas niewłaściwy. Mnie to nie przeszkadza, bo korzystam sporadycznie z windowsów. Ale raczej nie należy ufać na 100% podawanemu czasowi (oczywiście chodzi tylko i wyłącznie o przypadek stosowania windowsów wraz z innym systemem unixowym na tym samym komputerze).