Текущая системная дата

Статья обновлена: 17 июля 2023

Для отображения текущей даты и времени в операционной системе Linux с помощью командной строки используйте команду date или команду timedatectl. Эти команды также могут отображать текущее время / дату в заданном ФОРМАТЕ. Мы также можем установить системную дату и время от имени пользователя root.

Состояние перевода:
На этой странице представлен перевод статьи System time
. Дата последней синхронизации: 4 февраля 2022. Вы можете помочь
синхронизировать перевод, если в английской версии произошли изменения
.

В операционной системе время (часы) определяется тремя понятиями: значением времени (будь то местное время, UTC или что-то другое), часовым поясом и информацией о переходе на летнее время (DST), если это применимо. Эта статья рассказывает, что это такое и как их читать и менять. В системах присутствуют двое часов: аппаратные часы и системные часы, которые также подробно описаны в этой статье.

Стандартное поведение большинства операционных систем таково:

  • При загрузке для системных часов устанавливается значение из аппаратных часов.
  • Поддерживается точное время системных часов; смотрите #Синхронизация времени
    .
  • При выключении для аппаратных часов устанавливается значение из системных часов.

Regionally independent date time parsing

The output format of %DATE%
and of the dir
command is regionally dependent and thus neither robust nor smart. date.exe
(part of UnxUtils
) delivers any date and time information in any thinkable format. You may also extract the date/time information from any file with date.exe
.

Examples: (in a cmd-script use %% instead of %)

date.exe +"%Y%m%d %H%M%S: Any text"

20091222 185503: Any text

date.exe +"Text: %y/%m/%d-any text-%H.%M"

Text: 09/12/22-any text-18.55

Command: date.exe +"%m-%d """%H %M %S """"

07-22 “18:55:03″`

The date/time information from a reference file:

date.exe -r c:\file.txt +"The timestamp of file.txt is: %Y-%m-%d %H:%M:%S"

Using it in a CMD script to get year, month, day, time information:

 for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n 

Using it in a CMD script to get a timestamp in any required format:

 for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe +"%%y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i 

Extracting the date/time information from any reference file.

 for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n 

Adding to a file its date/time information:

 for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y-%%m-%%d.%%H%%M%%S"') do ren file.txt file.%%i.txt 

date.exe is part of the free GNU tools
which need no installation.

NOTE: Copying date.exe
into any directory which is in the search path may cause other scripts to fail that use the Windows built-in date
command.

New answer for an old question:

The question does not specify in what timezone. There are two reasonable possibilities:

  1. In UTC.
  2. In the computer’s local timezone.
 #include "date.h"
#include <iostream>
int
main()
{ using namespace date; using namespace std::chrono; std::cout << system_clock::now() << '\n';
} 

Which just output for me:

 2015-08-18 22:08:18.944211 

The date library essentially just adds a streaming operator for std::chrono::system_clock::time_point
. It also adds a lot of other nice functionality, but that is not used in this simple program.

If you prefer 2 (the local time), there is a timezone library
that builds on top of the date library
. Both of these libraries are open source
and cross platform
, assuming the compiler supports C++11 or C++14.

 #include "tz.h"
#include <iostream>
int
main()
{ using namespace date; using namespace std::chrono; auto local = make_zoned(current_zone(), system_clock::now()); std::cout << local << '\n';
} 

Which for me just output:

 2015-08-18 18:08:18.944211 EDT 

The result type from make_zoned
is a date::zoned_time
which is a pairing of a date::time_zone
and a std::chrono::system_clock::time_point
. This pair represents a local time, but can also represent UTC, depending on how you query it.

With the above output, you can see that my computer is currently in a timezone with a UTC offset of -4h, and an abbreviation of EDT.

If some other timezone is desired, that can also be accomplished. For example to find the current time in Sydney , Australia just change the construction of the variable local
to:

 auto local = make_zoned("Australia/Sydney", system_clock::now()); 

And the output changes to:

 2015-08-19 08:08:18.944211 AEST 

Команда date находится в оболочке Bash, которая является оболочкой по умолчанию в большинстве дистрибутивов Linux и даже в macOS. В этом руководстве показано, как настроить дату в командной строке и как использовать ее в сценариях оболочки, чтобы делать больше, чем просто выводить время.

Запустите команду date, чтобы увидеть эту информацию. Он печатает текущую дату и время для вашего часового пояса:

 date 

Форматирование по умолчанию выглядит немного глупо. Почему год не печатается после месяца и дня, а не отмечается в конце, за часовым поясом? Не бойтесь: если он контролирует формат вывода, который вам нужен, date доставляет его в избытке. Есть более 40 опций, которые вы можете передать на сегодняшний день, чтобы дать указание форматировать вывод именно так, как вы хотите.

Чтобы использовать любой из параметров, введите дату, пробел, знак плюса + и параметр, включая начальный знак процента. Параметр% c (данные и время в формате локали) приводит к тому, что дата и время печатаются в нормализованном формате, связанном с вашей локалью. Ваш регион определяется географической и культурной информацией, которую вы предоставили при установке операционной системы. Регион определяет такие вещи, как символ валюты, размеры бумаги, часовой пояс и другие культурные нормы.

 date +%c 

Вывод команды даты с опцией c

Теперь год отображается в выводе в более естественном положении.

На сегодняшний день можно передать сразу несколько вариантов. Последовательность параметров называется строкой формата. Чтобы увидеть название дня (% A), день месяца (% d) и название месяца (% B), используйте эту команду:

 date +%A%d%B 

Вывод команды даты с параметрами A d B

Это сработало, но некрасиво. Нет проблем, мы можем включать пробелы, если заключим всю строку формата в кавычки. Обратите внимание, что + выходит за рамки кавычек.

 date +"%A %d %B" 

Вывод команды даты с опцией A d B с пробелами

Вы можете добавить текст в строку формата, например:

 date +"Today is: %A %d %B" 

Вывод команды данных с добавленным пользователем текстом

Прокрутка даты вверх и вниз страница руководства
поиск нужного варианта вскоре становится утомительным. Мы разбили варианты на группы, чтобы вам было проще их обойти.

Иногда знание текущего времени на компьютере играет большую роль, например, при отслеживании выполнения тех или иных процессов. И далеко не всегда нужную информацию можно посмотреть через системный интерфейс Linux. Поэтому существуют различные команды для терминала.

В данной статье мы расскажем про то, как узнать текущее время Linux. Заодно упомянем тему часовых поясов и синхронизацию с серверами времени.

В системе Linux есть три удобных утилиты для определения точного времени. Наиболее продвинутой из них можно назвать date. Но и остальные имеют свои особенности.


С помощью date

Чтобы получить общую информацию, выполните команду:

uaAAAAAASUVORK5CYII=

Сначала выводится дата (день-число-месяц-год), время в 12-часовом формате с пометками AM (до полудня) и PM (после полудня) и часовой пояс. Информацию можно вывести в мировом UTC-формате:

opGhQSi6CYmEJ7N8eh4f8BOZdmvBIhxI4AAAAASUVORK5CYII=

Кроме того, для команды date можно самостоятельно задать форматирование вывода. Рассмотрим это на нескольких примерах с пояснениями. Первый вариант – вывод даты в привычном виде (день.месяц.год):

x8N4kMRa+TLRAAAAABJRU5ErkJggg==

Форматирование задается после знака +
. Первый символ после знака %
интерпретируется как один из модификаторов. А остальные символы выводятся как обычный текст. Этим можно пользоваться:

date +'Какой сегодня день? Сегодня %e число %m месяца %Y года'

nbsLHabCNnAAAAABJRU5ErkJggg==

Еще один пример – вывод даты в кратком виде и времени в 24-часовом формате:

date +’%a %d.%m.%g %R’

wGHL7wpE+TiSwAAAABJRU5ErkJggg==

Ну и не совсем стандартный вариант – вывести, какой это по счету день в году, и сам год:

date +'Сегодня %j день %Y года'

B+rYAMWWlZz3AAAAABJRU5ErkJggg==

А если вы хотите поподробнее разобраться в команде date, то ознакомьтесь с данной статьей
. В ней детально описан синтаксис, опции, форматирование вывода и конкретные примеры использования. А мы переходим к следующему способу.


2. С помощью hwclock

Вообще утилита hwclock используется для настройки даты и времени в системе Linux. Но еще она подходит для простого вывода этой информации. Запускать ее следует с правами супер-пользователя:

h3hn3UB4SXe3PonEtcdY6y3RdZ2QxB3AVKOcMmLWCXqZ+s3OUUUfWocSLuaLnhBlnFv8YwQQtUfrD7puWY5nT09SfMAoX0eHwDNgqCVdP8tHinPWYfRedu5Irju21O9enI5G9YNLrNLTfLseeuZPP8vqJhwphxhhyYAAAAASUVORK5CYII=

Обратите внимание на формат вывода времени. Он включает в себя еще и миллисекунды. И через дефис указывается часовой пояс. По умолчанию это UTC. Ну а для вывода локального времени нужно добавить к команде опцию –localtime
:

:/>  Не работает принтер в Windows 10 | remontka.pro

sudo hwclock --localtime


3. С помощью timedatectl

Еще один вариант просмотра текущего времени – использование утилиты timedatectl. Достаточно ввести команду в терминале:

f8PcnL6bLKipZMAAAAASUVORK5CYII=

Помимо даты и времени, здесь есть следующие интересующие нас поля:

  • Time zone
    – часовой пояс.
  • System clock synchronized
    – синхронизация часов с сервером.
  • NTP service
    – подключение к серверу точного времени.


Выводы

Каждый из упомянутых в статье способов Как узнать текущее время Linux имеет свои особенности. Для утилиты date можно детально настроить форматирование вывода. hwclock подходит для беглого просмотра информации, ведь в основном используется для настройки. А через timedatectl получится узнать еще и статус синхронизации часов.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Об авторе

Текущая системная дата

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

Instant

ZonedDateTime

= Instant

+ ZoneId

You can extract an Instant
from a ZonedDateTime
.

 Instant instantNow = zdt.toInstant(); 

You can start with an Instant. No need to specify a time zone here, as Instant
is always in UTC.

 Instant now = Instant.now(); 

Параметры, связанные с форматированием

% p: вывод индикатора AM или PM в верхнем регистре.

% P: Печатает индикатор am или pm в нижнем регистре. Обратите внимание на причуду этих двух вариантов. Строчная буква p соответствует прописной, а заглавная — строчной.

% t: печать табуляции.

% n: печатает новую строку.

Вывод команды даты с индикатором AM PM и параметрами форматирования

Отображение даты и времени в Linux с помощью команды timedatectl

В большинстве современных дистрибутивов Linux с системой systemd используется команда timedatectl. Она используется для запроса и изменения системных часов и их настроек, а также для включения или отключения служб синхронизации времени. Все, что вам нужно сделать, это ввести следующую команду:

Linux Отображение даты и времени с помощью командной строки

Update for C++20

This library is now largely adopted for C++20. The namespace date
is gone and everything is in namespace std::chrono
now. And use zoned_time
in place of make_time
. Drop the headers "date.h"
and "tz.h"
and just use <chrono>
.

 #include <chrono>
#include <iostream>
int
main()
{ using namespace std::chrono; auto local = zoned_time{current_zone(), system_clock::now()}; std::cout << local << '\n'; // 2021-05-03 15:02:44.130182 EDT
} 

As I write this, partial implementations are just beginning to emerge on some platforms.

Еще два изящных трюка

Чтобы узнать время последней модификации файла, используйте параметр -r (ссылка). Обратите внимание, что здесь используется знак — (дефис) вместо знака% и не требуется знак +. Попробуйте эту команду в своей домашней папке:

 date -r .bashrc 

Вывод команды даты с опцией времени модификации файла

Настройка TZ позволяет вам изменять часовой пояс на время одной команды.

 TZ=GMT date +%c 

Вывод команды даты для другого часового пояса

Time Zone

 ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z ); 

Generate a String representation of that date-time value, localized.

 String output = DateTimeFormatter .ofLocalizedDate( FormatStyle.FULL ) .withLocale( Locale.CANADA_FRENCH ) .format ( nowMontreal ); 


Нет ничего идеального. В том числе и часов. Время на любых часах хоть немного но отличается от реального. Одними из наиболее точных считаются атомные часы
. Кварцевые часы, используемые в компьютерах, также не являются абсолютно точными, зато имеют относительно постоянную погрешность.

При установке аппаратных часов с помощью hwclock
рассчитывается новое значение дрейфа в секундах в день. Значение дрейфа вычисляется с помощью разницы между новым установленным значением и значением аппаратных часов непосредственно перед установкой, с учётом значения предыдущего значения дрейфа и времени последней установки аппаратных часов. Новое значение дрейфа и время, когда часы были установлены, записываются в файл /etc/adjtime
, перезаписывая предыдущие значения. Таким образом, аппаратные часы могут быть скорректированы с учётом дрейфа при выполнении команды hwclock --adjust
; это также происходит при выключении, но только если демон hwclock
включен, поэтому в Arch-системах, использующих systemd, этого не происходит.

Примечание:
Если время аппаратных часов устанавливается повторно менее чем через 24 часа после предыдущей установки, дрейф не пересчитывается, поскольку hwclock
считает прошедший период времени слишком коротким для точного расчёта дрейфа.

Если аппаратные часы продолжают терять или набирать время с большим шагом, возможно, что был записан некорректный дрейф (но это применимо только в том случае, если запущен демон hwclock). Это может произойти, если вы неправильно установили время аппаратных часов или ваш стандарт времени
не совпадает со стандартом времени в Windows или macOS. Значение дрейфа можно сбросить, сначала удалив файл /etc/adjtime
, а затем установив правильное время аппаратных и системных часов. Затем следует проверить правильность используемого стандарта времени.

Примечание:
Если вы хотите использовать значение дрейфа, хранящееся в /etc/adjtime
, даже при использовании systemd (например, вы не можете или не хотите использовать NTP), вы должны регулярно вызывать hwclock --adjust
, например, создав задание cron
.

Программные часы очень точны, но, как и большинство часов, не идеально точны и могут дрейфовать. Хотя и редко, системные часы могут потерять точность, если ядро пропускает прерывания. Существуют некоторые инструменты для повышения точности программных часов; смотрите #Синхронизация времени
.

Tl;dr

 Instant.now() 


Есть два основных стандарта времени: местное (локальное) время (localtime) и Всемирное координированное время
(Coordinated Universal Time, UTC). Местное время зависит от текущего часового пояса, а время UTC — это глобальное время, которое одинаково для всех и не зависит от часовых поясов. U TC иногда называют гринвичским временем
(GMT), хотя это немного разные вещи.

Стандарт, который будет использоваться в аппаратных часах, выбирается операционной системой. По умолчанию Windows использует местное время, macOS использует UTC, а другие UNIX и UNIX-подобные системы используют разные стандарты. О С, использующая стандарт UTC, обычно рассматривает аппаратные часы как UTC и вносит в них поправку для установки времени ОС при загрузке в соответствии с часовым поясом.

Если на машине установлено несколько операционных систем, все они будут получать текущее время от одних и тех же аппаратных часов: рекомендуется настроить их на использование UTC, чтобы избежать конфликтов. В противном случае, если аппаратные часы установлены на местное время, сразу несколько операционных систем могут попытаться скорректировать его, например, после перехода на летнее/зимнее время, что приведёт к избыточной коррекции; проблемы могут также возникнуть при перемещении между различными часовыми поясами и использовании одной из операционных систем для сброса системных/аппаратных часов.

Значение аппаратных часов можно прочитать и изменить с помощью команды timedatectl
.
Вы можете узнать текущий стандарт, который Arch использует для работы с аппаратными часами, с помощью следующей команды:

 $ timedatectl | grep local 
 RTC in local TZ: no 

Переход на использование местного времени для аппаратных часов:

 # timedatectl set-local-rtc  1  

Переход на использование UTC для аппаратных часов:

 # timedatectl set-local-rtc  0  

Эти команды автоматически обновят аппаратные часы и файл /etc/adjtime
, дополнительные действия не требуются.

Во время запуска ядра, в момент загрузки драйвера RTC, значение системных часов может быть установлено по аппаратным часам. Произойдет ли это, зависит от аппаратной платформы, версии ядра и опций сборки ядра. Если это происходит, то в этот момент последовательности загрузки время аппаратных часов принимается за UTC и значение /sys/class/rtc/rtcN/hctosys
(N=0,1,2,.) будет установлено в 1.

Позже systemd снова обновляет системное время по аппаратным часам, опираясь на значения в /etc/adjtime
. Следовательно, использование аппаратных часов с местным временем может привести к неожиданному поведению во время загрузки, например, системные часы могут перескочить назад по времени, что всегда является плохой идеей ( это ещё не всё
). Чтобы избежать этого, systemd будет синхронизироваться назад
, только если аппаратные часы установлены в UTC, и не будет информировать ядро о локальном часовом поясе. Как следствие, временные метки на файловой системе FAT, которые изменены через Linux, будут в UTC.

  • Использование timedatectl
    требует активной шины D-Bus
    . Поэтому использование этой команды под chroot
    (например, во время установки) может оказаться невозможным. В таких случаях можно вернуться к команде hwclock или использовать systemd-nspawn
    вместо chroot.
  • Если файл /etc/adjtime
    отсутствует, systemd по умолчанию считает, что аппаратные часы используют UTC.


UTC в Microsoft Windows

Это делается простым изменением в реестре: откройте regedit
и добавьте DWORD
ключ со значением 1
здесь:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal 

Это можно сделать одной командой в командной строке, запущенной от имени администратора:

 reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f 

Также можно создать *.reg
файл и импортировать его в реестр двойным щелчком мыши:

:/>  Как сделать инверсию мыши в Windows 10? - Онлайн справочник по настройке гаджетов

 Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001 

Если Windows попросит обновить часы в связи с изменениями DST, позвольте ей это сделать. Часы останутся в UTC, как и ожидалось, скорректируется только отображаемое время.

После этого #Аппаратные часы
и #Системные часы
может понадобиться обновить.

Если у вас проблемы со смещением времени, попробуйте переустановить и заново установить часовой пояс:

 # timedatectl set-timezone Europe/Moscow 


В очень старых версиях Windows это всё не работает из-за их багов. Более конкретно,

  • В 64-битных версиях Windows 7 и старых сборках Windows 10 существовала ошибка, из-за которой требовалось значение QWORD
    со значением 1
    вместо DWORD
    . Эта ошибка была исправлена в новых сборках, и теперь работает только DWORD
    .
  • До Vista SP2 существовала ошибка, которая сбрасывала часы на местное время после возвращения из ждущего или спящего режима.
  • В XP и более старых версиях есть ошибка, связанная с переходом на летнее время. Подробнее: [2]
  • Для еще более старых версий Windows лучше прочитать https://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html
    — тогда эта функциональность даже не была задокументирована и официально не поддерживалась.

Для этих операционных систем рекомендуется использовать местное время.


UTC в Ubuntu

Если Ubuntu на любом диске обнаруживает Windows в процессе установки, то для аппаратных часов она автоматически начинает использовать местное время. Очевидно, это сделано специально, чтобы позволить новым пользователям Linux опробовать Ubuntu на своих компьютерах с Windows без редактирования реестра.

Изменить это поведение можно так же, как описано выше.


Network Time Protocol
(NTP) — это протокол для синхронизации часов компьютерных систем в сетях передачи данных с коммутацией пакетов и переменной задержкой. Ниже приведены реализации NTP, доступные для Arch Linux:

https://chrony.tuxfamily.org/
||
https://01.org/connman (waybackmachine)
||
https://www.ntp.org/
||
  • ntpclient
    — Простой NTP-клиент с интерфейсом командной строки.
http://doolittle.icarus.com/ntpclient/
|| AUR
https://ntpsec.org/
|| AUR
https://www.openntpd.org/
||
  • sntp
    — Клиент SNTP
    , который поставляется вместе с NTPd. Он заменяет ntpdate и рекомендуется в несерверных средах.
https://www.ntp.org/
||
  • systemd-timesyncd

    — Простой демон SNTP
    , который реализует только клиентскую часть, фокусируясь только на запросе времени с одного удалённого сервера. Он должен быть более чем подходящим для большинства установок.
https://www.freedesktop.org/wiki/Software/systemd/
||

Варианты отображения дня

Вывод команды даты с параметрами A uwdej

Переменная среды TZ

Среда TZ сообщает Linux, в каком часовом поясе вы находитесь. Во многих случаях, когда вы хотите временно изменить часовой пояс. Например, вы можете захотеть вывести текущую дату и время в часовом поясе “America/Los_Angeles”, хотя вы находитесь в “Europe/London”. Чтобы установить TZ, при использовании TCSH/CSH выполните следующую команду:

 TZ="America/Los_Angeles" date
TZ="Asia/Tokyo" date 

Вывод времени в другой TimeZone

 timedatectl list-timezones 
 timedatectl list-timezones | more 
 timedatectl list-timezones | grep -i Hong_kong 
 timedatectl list-timezones | grep -i paris 
 timedatectl list-timezones | grep -E -i 'paris|london|kolkata' 


Узнать текущий часовой пояс, установленный в системе:

 $ timedatectl status 

Просмотр списка доступных часовых поясов:

 $ timedatectl list-timezones 

Изменение часового пояса:

 # timedatectl set-timezone  Регион 
/  Город  
 # timedatectl set-timezone Europe/Moscow 
 # ln -sf /usr/share/zoneinfo/  Регион 
/  Город  /etc/localtime 

Совет:
Можно найти и выбрать нужный часовой пояс с помощью интерактивного помощника tzselect
.

Смотрите и для более подробной информации.


Выбор на основе геолокации

Примечание:
Некоторые среды рабочего стола поддерживают автоматический выбор часового пояса (например, смотрите GNOME (Русский)#Дата и время
).


Обновление часового пояса после подключения к сети через NetworkManager

Создайте скрипт NetworkManager dispatcher
:

 /etc/NetworkManager/dispatcher.d/09-timezone 
 #!/bin/sh
case "$2" in up) timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"  ;;
esac 

UTC

Generally better to get in the habit of doing your back-end work (business logic, database, storage, data exchange) all in UTC
time zone. The code above relies implicitly on the JVM’s current default time zone.

The Instant
class represents a moment in the timeline in UTC with a resolution of nanoseconds.

 Instant instant = Instant.now(); 

When you need more flexibility in formatting, transform into an OffsetDateTime

. Specify a ZoneOffset

object. For UTC use the handy constant for UTC
.

 OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ); 

Использование даты в скриптах

Включение сценария оболочки Bash для печати времени и даты тривиально. Создайте текстовый файл со следующим содержимым и сохраните его как gd.sh.

 #!/bin/bash
TODAY=$(date +"Today is %A, %d of %B")
TIMENOW=$(date +"The local time is %r")
TIME_UK=$(TZ=BST date +"The time in the UK is %r")
echo $TODAY
echo $TIMENOW
echo $TIME_UK 

Введите следующую команду, чтобы установить разрешения на выполнение и сделать скрипт исполняемым.

 chmod +x gd.sh 

Запустите сценарий с помощью этой команды:

 ./gd.sh 

Вывод скрипта gd.sh

Мы можем использовать команду date для предоставления отметки времени. Показанный сценарий создаст каталог с отметкой времени в качестве имени. Затем он скопирует в нее все текстовые файлы из текущей папки. Периодически запуская этот скрипт, мы можем делать снимки наших текстовых файлов. Со временем мы создадим серию папок с разными версиями наших текстовых файлов.

Обратите внимание, что это не надежная система резервного копирования, это просто для иллюстративных целей.

Создайте текстовый файл со следующим содержимым и сохраните его как snapshot.sh.

 #!/bin/bash
# obtain the date and time
date_stamp=$(date +"%F-%H-%M-%S")
# make a directory with that name
mkdir "$date_stamp"
# copy the files from the current folder into it
cp *.txt "$date_stamp"
# all done, report back and exit
echo "Text files copied to directory: "$date_stamp 

Введите следующую команду, чтобы установить разрешения на выполнение и сделать скрипт исполняемым.

 chmod +x snapshot.sh 

Запустите сценарий с помощью этой команды:

 ./snapshot.sh 

Эффект от запуска скрипта snapshot.sh

Вы увидите, что каталог был создан. Его имя — это дата и время выполнения сценария. Внутри этого каталога находятся копии текстовых файлов.

Если немного подумать и проявить изобретательность, можно продуктивно использовать даже скромную команду свидания.

  • ntpd -qg

  • Часы показывают значение, которое не является ни UTC, ни местным временем

    Это может быть вызвано рядом причин. Например, если ваши аппаратные часы используют местное время, но timedatectl
    настроен на то, чтобы считать, что они используют UTC, в результате смещение вашего часового пояса относительно UTC будет применено дважды, что приведёт к неправильным значениям местного времени и UTC.

    Чтобы заставить ваши часы показывать правильное время, а также записать правильный UTC в ваши аппаратные часы, выполните следующие шаги:

    • Настройте ntpd
      (включать его как службу не обязательно).
    • Установите правильный

      часовой пояс

      .

      Запустите
      для ручной синхронизации ваших часов с сетью, игнорируя большие отклонения между локальным UTC и сетевым UTC.

      Запустите hwclock --systohc
      для записи текущего системного времени в аппаратные часы.

    Варианты отображения месяца

    Вывод команды даты с параметрами bh B m

    Windows 11, 10

    Как синхронизировать дату и время автоматически

    1. В правом нижнем углу экрана на панели задач найдите часы и нажмите на них правой кнопкой мыши.
    1. Проверьте, правильно ли указан ваш часовой пояс. Если часовой пояс указан неправильно, нажмите на него и выберите нужный из выпадающего списка.

    Выбор часового пояса в Windows

    1. Нажмите Синхронизировать
      , чтобы синхронизировать дату и время с сервером времени в интернете.

    Синхронизация системной даты и времени по интернету

    Как изменить дату и время вручную

    1. Установите переключатель Устанавливать время автоматически
      для Windows 11 или Установить время автоматически
      для Windows 10 в выключенное положение и нажмите Изменить
      .

    Переход к изменению даты и времени в Windows

    1. Установите текущие дату и время и нажмите Изменить
      .

    Изменение системных даты и времени в Windows

    ZonedDateTime

    Get the current moment in java.time.

     ZonedDateTime now = ZonedDateTime.now(); 

    A ZonedDateTime

    encapsulates:

    • Date.
    • Time-of-day, with a fraction of a second to nanosecond
      resolution.
    • Time zone.

    If no time zone is specified, your JVM’s current default time zone is assigned silently. Better to specify your desired/expected time zone than rely implicitly on default.

     ZoneId z = ZoneId.of( "Pacific/Auckland" );
    ZonedDateTime zdt = ZonedDateTime.now( z ); 

    Варианты отображения даты

    % D: печатает дату в формате мм / дд / гг.

    % F: печатает дату в формате гггг-мм-дд.

    % x: печатает дату в формате для вашего региона.

    Вывод команды даты с параметрами DF x


    Аппаратные часы
    (они же часы реального времени (RTC) или часы CMOS) хранят следующие значения: год, месяц, день, час, минута и секунда. Только в прошивках UEFI
    2016 года или новее есть возможность хранить часовой пояс, а также информацию о переходе на летнее время.



    Просмотр времени из аппаратных часов

     

    # hwclock --show Эффект от запуска скрипта snapshot.sh

    Вывод скрипта gd.sh Изменение времени аппаратных часов по системным часам

    Следующая команда устанавливает время в аппаратных часах, беря значение из системных часов. Кроме того, она обновляет файл

    или создаёт его, если он отсутствует. Смотрите раздел "The Adjtime File" в для более подробной информации, а также раздел

    #Погрешность часов

    .

     # hwclock --systohc 

    Инструмент с графическим интерфейсом

    Инструмент администрирования времени позволяет вам установить время, дату и часовой пояс вашей системы, а также установить любой сервер времени для синхронизации вашего локального сервера времени. Введите следующую команду, чтобы запустить инструмент администрирования времени:

     

    Вам может быть предложено ввести пароль администратора (пароль root), это необходимо, так как изменения, сделанные с помощью этого инструмента, повлияют на всю систему.

    Как изменить настройки даты и времени в рабочем столе Linux на базе Gnome

    Во-первых, вам нужно Настройки в Деятельности, а затем нажмите Детали в боковой панели. Обязательно нажмите Дата и время в боковой панели, чтобы открыть панель:

    Настройки даты и времени Gnome

    Варианты отображения часа

    Вывод команды даты с параметрами HI

    Оптимальная защита для Windows

    Kaspersky for Windows защищает вашу цифровую жизнь, выходя за рамки обычного антивируса.

    Windows 8, 8

    1. Перейдите на рабочий стол и в правом нижнем углу экрана на панели задач найдите часы. Нажмите на часы правой кнопкой мыши и выберите Изменение настроек даты и времени .

    Переход в настройки даты и времени в Windows 8, 8.1

    1. Проверьте, правильно ли указан ваш часовой пояс. Если часовой пояс указан неправильно, нажмите Изменить часовой пояс .

    Переход к выбору часового пояса в Windows 8, 8.1

    1. Выберите ваш часовой пояс в выпадающем списке и нажмите OK .

    Выбор часового пояса в Windows 8, 8.1

    1. Перейдите на вкладку Время по Интернету и нажмите Изменить параметры , чтобы синхронизировать дату и время с сервером времени в интернете.

    Переход к настройке даты и времени по интернету в Windows 8, 8.1

    1. Нажмите Обновить сейчас . Дождитесь окончания синхронизации и нажмите  OK .

    Настройка даты и времени по интернету в Windows 8, 8.1

    Как изменить дату и время вручную

    1. Перейдите на вкладку Дата и время и нажмите Изменить дату и время .

    Переход к изменению даты и времени вручную в Windows 8, 8.1

    1. Установите текущие дату и время и нажмите ОК .

    Изменение даты и времени в Windows 8, 8.1

    Синтаксис

    Откройте приложение терминала и введите следующую команду:

    Команда Date вернет следующий результат

    date

    Вы можете отформатировать дату следующим образом в формате dd-mm-yy:

    Отформатированная дата

    Простое отображение текущего времени в Linux:

    От форматирование время

    Чтобы вывести дату позавчерашнего дня, выполните:

    Хотите узнать день года Рождества в текущем году? Попробуйте:

    Выведите полное название текущего месяца и день месяца: OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

    Получение текущего времени в секундах с момента наступления эпохи Linux

     
  • timedatectl Параметры отображения даты и времени
  • % c: печатает дату и время в формате для вашего языка, включая часовой пояс. ntpd -qg
  • Параметры отображения минут
  •  
     

    Java. time

    The java.util. Date class has been outmoded by the new java.time package
    (

    Tutorial

    ) in Java 8 and later. The old java.util. Date/. Calendar classes are notoriously troublesome, confusing, and flawed. Avoid them.

    Instant Windows Vista, 7

     

    В правом нижнем углу экрана на панели задач найдите часы. Нажмите на часы правой кнопкой мыши и выберите Изменение настроек даты и времени OffsetDateTime
    .

    Instant instant = Instant.now();

    ZoneOffset


    Проверьте, правильно ли указан ваш часовой пояс. Если часовой пояс указан неправильно, нажмите

    Изменить часовой пояс

    .

     

     

    Выберите ваш часовой пояс в выпадающем списке и нажмите

     OK 

    .

     

    Вывод скрипта gd.sh

    Перейдите на вкладку

    Время по Интернету
     и нажмите 

    Изменить параметры

    , чтобы синхронизировать дату и время с сервером в интернете.

     

    Нажмите Эффект от запуска скрипта snapshot.sh Обновить сейчас
    . Дождитесь окончания синхронизации и нажмите

    OK

    .

    Как изменить дату и время вручную

    Перейдите на вкладку Дата и время.

    Нажмите

    Изменить дату и время

    .

    • Установите текущие дату и время и нажмите ОК

      .

      Изменение системной даты в Windows Vista, 7

      Спасибо за ваш отзыв, вы помогаете нам становиться лучше!

      Спасибо за ваш отзыв, вы помогаете нам становиться лучше!

      Параметры отображения информации о часовом поясе

      % z: печатает разницу во времени между вашим часовым поясом и UTC.

      %: z: печатает разницу во времени между вашим часовым поясом и временем в формате UTC с: между часами и минутами. Обратите внимание на: между знаком% и z.

      % :: z: выводит разницу во времени между вашим часовым поясом и временем в формате UTC с: между часами, минутами и секундами. Обратите внимание на :: между знаком% и z.

      % Z: печатает буквенное название часового пояса.

      Вывод команды даты с параметрами часового пояса


      Системные часы
      (они же программные часы) отслеживают время, часовой пояс и информацию о переходе на летнее время, если применимо. В ядре Linux они представлены как количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Начальное значение системных часов вычисляется из аппаратных часов в зависимости от содержимого файла /etc/adjtime
      . После завершения загрузки системные часы работают независимо от аппаратных часов. Ядро Linux отслеживает системные часы путём подсчета прерываний таймера.


      Для проверки текущего времени системных часов (представленных как в местном времени, так и в UTC), а также RTC (аппаратных часов):

       $ timedatectl 


      Изменение времени системых часов

      Установка местного времени для системых часов:

       # timedatectl set-time "гггг-ММ-дд чч:мм:сс" 
       # timedatectl set-time "2014-05-26 11:13:54" 

      Установит 26 мая 2014 года, 11 часов 13 минут 54 секунды.

      Настройки для пользователя/сессии или временные настройки

      В некоторых случаях может быть полезно изменить настройки времени, не затрагивая глобальные системные значения. Например, для тестирования приложений, полагающихся на время во время разработки, или для настройки системного часового пояса при удалённом входе на сервер из другой зоны.

      Чтобы заставить приложение «видеть» дату/время, отличное от системного, можно воспользоваться утилитой (из пакета ).

      Если вы хотите, чтобы приложение «видело» часовой пояс, отличный от системного, установите переменную окружения
      TZ
      , например:

       $ date && export TZ=":/usr/share/zoneinfo/Pacific/Fiji" && date 
       Вт 01 ноя 2016 16:34:51 MSK
      Ср 02 ноя 2016 01:34:51 +12 

      Это отличается от простой установки времени, поскольку, например, позволяет протестировать поведение программы с положительными или отрицательными значениями смещения UTC, или влияние изменений летнего/зимнего времени при разработке на системах с часовым поясом, в котором нет переходов на летнее/зимнее время.

      Другим вариантом использования является установка разных часовых поясов для разных пользователей одной системы: это можно сделать, установив переменную TZ
      в конфигурационном файле оболочки; смотрите Переменные окружения#Установка переменных
      .

      Параметры для изменения других параметров

      Эти модификаторы могут быть вставлены между% и буквой параметра других параметров, чтобы изменить их отображение. Например,% -S удалит ведущий ноль для однозначных значений секунд.

      -: одиночный дефис предотвращает заполнение нулями однозначных значений.

      _: одиночное подчеркивание добавляет ведущие пробелы для однозначных значений.

      0: предоставляет ведущие нули для однозначных значений.

      ^: Если возможно, используются прописные буквы (не все параметры соответствуют этому модификатору).

      #: По возможности используйте для параметра регистр, противоположный стандартному (не все параметры соответствуют этому модификатору).

      Вывод команды даты с параметрами форматирования


      • Linux Tips - Linux, Clocks, and Time
      • An introduction to timekeeping in Linux VMs
      • Источники данных, определяющие часовые пояса и переход на летнее время
        для пакета
      • Time Scales
      • Gentoo:System time
      • Время
        (Википедия)

      Варианты отображения недели

      % U: выводит номер недели в году, считая воскресенье первым днем ​​недели. Например, третья неделя года, двадцатая неделя года и т. Д.

      % V: выводит номер недели года по стандарту ISO, считая понедельник первым днем ​​недели.

      % W: номер недели в году, считая понедельник первым днем ​​недели.

      Вывод команды даты с параметрами UVW

      Варианты отображения времени

      % T: печатает время в формате ЧЧ: ММ: СС.

      % R: часы и минуты печатаются в формате ЧЧ: ММ без секунд в 24-часовом формате.

      % r: печатает время в соответствии с вашим языком, используя 12-часовой формат и индикатор до или после полудня.

      % X: печать времени в соответствии с вашим языком в 24-часовом формате. Якобы. Обратите внимание, что во время тестирования эта опция вела себя точно так же, как% r, как показано ниже. На компьютере с Linux, настроенном для локали Великобритании и установленном на GMT, он печатал время, используя 24-часовые часы без индикатора AM или PM, как и ожидалось.

      Вывод команды даты с параметрами TR r X

      Варианты отображения года

      % C: Печатает век без года. В 2019 году он напечатает 20.

      % y: выводит год в виде двух цифр. в 2019 году напечатает 19.

      % Y: вывод года в виде четырех цифр.

      Вывод команды даты с параметрами C y Y

      Варианты отображения секунд

      Вывод команды даты с опциями s SN

      Заключение

      В этом кратком руководстве вы узнали о команде date, которую можно использовать для просмотра или изменения даты/времени в операционных системах Linux. Далее мы объяснили, как использовать инструменты графического интерфейса. Команда date имеет множество дополнительных опций. Посмотрите страницу man, набрав следующую команду man:

       man date
      man bash
      man ksh
      man timedatectl 

      Советы и рекомендации

      alarm-fake-hwclock
      разработан специально для систем без нормально работающих аппаратных часов. Он включает в себя службу systemd, которая при выключении сохраняет текущее время, а при следующем запуске восстанавливает сохранённое время, таким образом избегая странных ошибок путешествия во времени.

      Установите
      пакет AUR

      , запустите
      и включите
      службу fake-hwclock.service
      .