Лого на страниците (малко).

Заглавна страница > Четива > Четива за линукс > Настройка на часовника, датата и на часовата зона

 

Александър Иванов

Настройка на часовника, датата и на часовата зона

Обикновено при инсталацията на линукс се определя и часовата зона (time zone), а това определя и датата, и часа. При съвременните операционни системи часовникът се сверява по интернет — има си специални сървъри за това и протокол за връзка с тях (Network Time Protocol).

В почти всички графични среди има и програма, с която може да определите или да смените настройките за часовата зона — това става в раздел с име Regional Settings или Region & Language, или нещо подобно. Ама няма да ви се налага да го правите, ако не пътувате на големи разстояния с компютъра си.

И — само за информация — часовникът може да се синхронизира и чрез системата GPS, ако разполагате с такова устройство.

Днес през операционната система дори е малко трудно да видите каква е истинската настройка на часовника (хардуерния часовник) в компютъра ви. Най-лесно може да видите това през BIOS или — на съвременните компютри — през UEFI Setup. И най-вероятно ще установите, че часовникът е настроен „по Гринуич“ (GMT — Greenwich Mean Time), тоест по UTC (Coordinated Universal Time), което на практика е едно и също.

Ако сте чак толкова любопитни, че искате да знаете разликата, почнете, например, от тук: The Difference Between GMT and UTC.

В подобните на UNIX системи е прието така — хардуерният часовник да бъде настроен по UTC, а локалното време по часовата зона да се определя от операционната система. В Windows обикновено хардуерният часовник се настройва по локалното време. Това са технически подробности, ама могат да създават проблеми, ако на компютъра ви има две операционни системи.

Сега ще обяснявам за линукс, ще заобиколя всички мними различия, които показват различните графични среди, ще отворя терминала и ще ви покажа няколко команди, с които нещата се решават бързо.

Първо погледнете файла /etc/localtime. Той определя часовата зона.

Това може да е бинарен файл с дължина 2–3 KB, а може да бъде и текстова препратка (symbolic link) към, например, /usr/share/zoneinfo/Europe/Sofia.

Да, в /usr/share/zoneinfo са събрани файловете за определяне на часовата зона. И оттам може да си подберете файл за смяна на зоната, например /usr/share/zoneinfo/Europe/Malta.

Ако отивате в Малта, аз завиждам!

Естествено, първо трябва да изтриете /etc/localtime, например така:

$ sudo rm /etc/localtime

Като изтриете този файл, погледнете часовника — той най-вероятно се е „превъртял“ към UTC, тоест към времето, отчитано от хардуерния часовник.

Сега, в зависимост от това как стоят нещата във вашата система, копирайте

$ sudo cp /usr/share/zoneinfo/Europe/Malta /etc/localtime

или създайте текстова препратка:

$ sudo ln -s /usr/share/zoneinfo/Europe/Malta /etc/localtime

Всичките тези неща, по моему, се правят най-лесно и най-бързо с mc (Midnight Commander), но това е въпрос на навик.

Повечето съвременни сглобки на линукс използват като стартиращ процес systemd, а не init. Ако е така при вас, може да използвате командата timedatectl:

$ sudo timedatectl list-timezones | grep 'Malta'

Ще получите като резултат:

Europe/Malta

И сменяте часовата зона:

$ sudo timedatectl set-timezone 'Europe/Malta'

Щом се извършва синхронизация по интернет, както вече казах, настройката на часовата зона е достатъчна, за да се настроят календарът и часовникът.

Ако по някакви причини услугата синхронизация на часовника не работи, опитайте да я стартирате:

$sudo timedatectl set-ntp yes

Съкращението ntp е от Network Time Protocol, а вместо yes може да напишете и true. С no/false може да спрете услугата, ама не се сещам за какво може да ви е нужно това.

С командата

$sudo timedatectl status

може да видите какво е реалното положение на нещата. Вероятно ще видите нещо подобно:

		      Local time: ср 2018-05-16 19:34:31 EEST
                  Universal time: ср 2018-05-16 16:34:31 UTC
                        RTC time: ср 2018-05-16 16:34:31
                       Time zone: Europe/Sofia (EEST, +0300)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no
			

RTC е съкращение от Real-Time Clock, тоест, хардуерния часовник. Тук виждате „истинската“ настойка на часовника. Но по-важното е, че синхронизацията работи.

EEST е съкращение от Eastern European Summer Time. Абе източно европейското време е отместено спрямо UTC с плюс два часа, а тук са три. Щото програмното осигуряване отчита лятното часово време (по английски Daylight saving time, DST).

* * *

В линукс си съществува и старата юникска команда date. Но има още и hwclock. Например с

$ date

чт май 3 22:10:51 EEST 2018

се чете времето на системата.

С hwclock се чете времето по компютърния, хардуерния часовник:

$ hwclock

2018-05-03 22:11:12.967257+0300

Резултатът изглежда доста сходен, но времето се дава с части от секундата, а с изразът +0300 се посочва отместване от плюс три часа и 0 минути спрямо UTC. Програмистите са предвидили и минутите, защото има часови зони, където отместването не е кръгъл час. Вижте, например Непал: UTC+05:45. Изразът +0300 е и косвено указание, че хардуерният часовник е настроен по UTC.

И date може да се използва за настройка на времето в операционната система, и hwclock може да се използва за настройка на компютърния, хардуерния часовник, но…

Но тези настройки се отменят от по-общата настройка по часови пояс и от синхронизацията. Все пак може да опитате следното (може да зададете произволно час:минути:секунди):

$ sudo date +%T -s '10:00:00'

10:00:00

Ключето -s е от set, часът се задава в кавички — единични или двойни. Шаблонът е за формат час:минути:секунди, а знакът + е инструкция данните по шаблона да се отпечатат на конзолата.

Когато въвеждате тази команда, гледайте часовника на екрана. Ще забележите, че примигва, може даже да успеете да разчетете 10:00:00. Да, командата е изпълнена, но автоматиката я отменя почти веднага („сверява“ часовника).

Използването на знака + в тази команда не е обяснено в документацията, та малко експерименти ще са ви полезни. Сравнете, например, работата на тези два варианта на командата:

$ date "днес е %A"

и

$ date +"днес е %A"

Главната буква A, разбира се, е латинска.

На съвременен линукс командите date и hwclock се използват най-вече за четене на информация, не за настройки. Но си спомнете за тях, ако се опитвате да върнете към живот старото си компютърче без връзка с интернет.

* * *

Ще направя и една по-обща забележка — как се измерва времето в подобните на UNIX системи?

В секунди. В брой секунди от 1 януари 1970 година 00:00:00 UTC. Това е горе-долу времето, когато се е появил първият работещ UNIX, та периода оттогава насам наричат и UNIX epoch.

Изпълнете

$ date +%s

и ще видите колко секунди са минали оттогава. Доста голямо число.

На current millis ще видите как „цъка“ часовникът на епохата UNIX, ще видите универсалното и локалното време и още много други полезни неща.

А в уикипедията има страница Orders of magnitude (time), откъдето става ясно, че подобен брой секунди е по-удобно да се изразяват в гигасекунди (Gs = 109 s, малко повече от 31 години и 287 дни). Епохата на UNIX вече е преполовила втората гигасекунда.

И предвидливите хора вече говорят за „проблема 2038 година“. Да, на 19 януари 2038 година броят на секундите би трябвало да препълни 32-битова памет за цяло число.

И какво от това? Вече сме преживели „проблема 2000“ и само жълтата преса беше пълна с катастрофични прогнози, нали? Та аз не съм особено разтревожен и от „проблема 2038 година“.

* * *

Накрая само да ви подсетя — нито работата с календара, нито работата с часовника е проста и очевидна. Историците и старобългаристите знаят, че е трудно понякога дори годината, спомената в някакъв средновековен източник, да се определи в „съвременна мярка“. Много култура, много традиция е натрупана върху това. А не бива да забравяме и възможността преписвачът да е сбъркал нещо…

Ама ето по-близък пример — всеки ще се сети, че е чел за рожденна дата, например, „по стар стил“ (по Юлианския календар) и „по нов стол“ (по Грегорианския календар, приет у нас през 1916 г.). Не чак толкова отдавна.

Затова Българската православната църква празнува на 11 май светите равноапостолни Методий и Кирил (по стар стил), а не на 24-ти май.

Ако си мислите, че поне времето в денонощието е измервано винаги както сега, пак бъркате. Ето ви загадка върху задължителната училищна литертура, която всички вие, разбира се, внимателно сте чели. Върху „Под игото“.

Когато Краличът влиза в Бяла черква, той среща доктор Соколов. Докторът му дава дрехата си, защото „беше гол и окъсан“. По-късно Краличът нарушава идиличната вечеря у чорбаджи Марко, на портата чукат заптиета и той побягва. В гонитбата му смъкват дрехата от гърба. После арестуват доктор Соколов и беят го разпитва как така от гърба на беглеца е смъкната неговата дреха. Докторът обяснява, че я е дал на един сиромах.

— По кое време? — пита беят.

— Тъкмо по два часа (по турски) — обяснява докторът.

В колко часа „по сегашному“ са се срещнали Краличът и доктор Соколов?

Страница: А. И.
Електронна поща
Дата на публикуване: 30.III.2019
Последна редакция: 26.IV.2023
Съобразено с
html5/css3