В информатике и компьютерном программировании , системное время представляет понятие компьютерной системе , по прошествии времени. В этом смысле время также включает дни в календаре .
Системное время измеряется часами системы , которая , как правило , реализуется как простой подсчет числа клещей , которые произошли с момента произвольной начальной даты, называемой эпохой . Например, системы, совместимые с Unix и POSIX, кодируют системное время (« время Unix ») как количество секунд, прошедших с начала эпохи Unix в 00:00:00 UT 1 января 1970 года , за исключением дополнительных секунд . Системы, реализующие 32-битные и 64-битные версии Windows API , такие как Windows 9x и Windows NTукажите системное время как SYSTEMTIME , представленное в виде значения года / месяца / дня / часа / минуты / секунды / миллисекунды, так и FILETIME , представленное как количество 100-наносекундных тактов с 1 января 1601 г. 00:00: 00 UT по пролептическому григорианскому календарю .
Системное время можно преобразовать в календарное время , которое является формой, более подходящей для понимания человеком. Например, системное время Unix 1 000 000 000 секунд с начала эпохи переводится в календарное время 9 сентября 2001 01:46:40 UT . Подпрограммы библиотеки, которые обрабатывают такие преобразования, могут также иметь дело с настройками часовых поясов , летнего времени (DST), дополнительных секунд и настроек локали пользователя . Также обычно предоставляются библиотечные подпрограммы, которые преобразуют календарное время в системное время.
Другие измерения времени
С системным временем тесно связано время процесса , которое является подсчетом общего времени процессора, потребляемого выполняющимся процессом . Оно может быть разделено на пользовательское и системное процессорное время, представляющее время, потраченное на выполнение пользовательского кода и кода ядра системы соответственно. Время процесса - это сумма инструкций процессора или тактовых циклов и, как правило, не имеет прямой зависимости от времени на стене .
Файловые системы отслеживают время создания, изменения и / или доступа к файлам, сохраняя временные метки в блоке управления файлом (или inode ) каждого файла и каталога .
История
Большинство персональных компьютеров первого поколения не отслеживали дату и время. К ним относятся системы, работающие под управлением операционной системы CP / M , а также ранние модели Apple II , BBC Micro и Commodore PET , среди прочих. Дополнительные периферийные платы, которые включали микросхемы часов реального времени с резервной батареей на плате, были доступны для IBM PC и XT , но IBM AT был первым широко доступным ПК, оснащенным оборудованием даты / времени, встроенным в материнская плата . До того, как компьютерные сети стали широко доступны , большинство персональных компьютерных систем, которые действительно отслеживали системное время, делали это только относительно местного времени и не делали поправок на разные часовые пояса .
Благодаря современным технологиям большинство современных компьютеров отслеживают местное гражданское время, как и многие другие домашние и личные устройства, такие как видеомагнитофоны , видеорегистраторы , приемники кабельного телевидения , КПК , пейджеры , сотовые телефоны , факсы , автоответчики , фотоаппараты , видеокамеры и т. Д. центральные кондиционеры и микроволновые печи .
Микроконтроллеры, работающие во встроенных системах (таких как Raspberry Pi , Arduino и другие подобные системы ), не всегда имеют внутреннее оборудование для отслеживания времени. Многие такие системы контроллеров работают без знания внешнего времени. Те, кому требуется такая информация, обычно инициализируют свое базовое время после перезагрузки , получая текущее время из внешнего источника, такого как сервер времени или внешние часы, или предлагая пользователю вручную ввести текущее время.
Выполнение
Системного тактового сигнала , как правило , реализован в виде программируемого таймера интервала , который периодически прерывает процессор, который затем начинает выполнение таймера прерывания процедуры обслуживания. Эта процедура обычно добавляет один тик к системным часам (простой счетчик) и обрабатывает другие периодические служебные задачи ( вытеснение и т. Д.), Прежде чем вернуться к задаче, которую ЦП выполнял до прерывания.
Получение системного времени
01 июня 2021 20:50:51 UTC Системное время Википедии, когда эта страница была в последний раз создана. |
В следующих таблицах показаны методы получения системного времени в различных операционных системах , языках программирования и приложениях . Значения, отмеченные (*), зависят от системы и могут отличаться в зависимости от реализации. Все даты даны по григорианскому или пролептическому григорианскому календарю .
Обратите внимание, что разрешение измерения времени реализацией не означает такой же точности таких измерений. Например, система может возвращать текущее время как значение, измеренное в микросекундах, но на самом деле способна распознавать отдельные такты часов с частотой всего 100 Гц (10 мс).
Операционные системы
Операционная система | Команда или функция | разрешение | Эпоха или диапазон |
---|---|---|---|
Android | java.lang | 1 мс | 1 января 1970 г. |
BIOS ( IBM PC ) | INT 1Ah, AH = 00h [1] | 54,9254 мс 18,2065 Гц | Полночь текущего дня |
INT 1Ah, AH = 02h [2] | 1 с | Полночь текущего дня | |
INT 1Ah, AH = 04h [3] | 1 день | С 1 января 1980 г. по 31 декабря 1999 г. или 31 декабря 2079 г. (в зависимости от системы) | |
CP / M Plus | Блок управления системой: [4] scb $ base + 58h, Количество дней с 1 января 1978 г. scb $ base + 5Ah , час (BCD) scb $ base + 5Bh , Минуты (BCD) scb $ base + 5Ch , Second (BCD) | 1 с | 1 января 1978 г. - сентябрь 2067 г. |
Функция BDOS 69 ч > ( T_GET ): [5] слово , Дни с 1 января 1978 г. байт , час (BCD) байт , минута (BCD) байт , секунда (BCD) | |||
DOS ( Microsoft ) | C: \>ДАТА C: \>ВРЕМЯ | 10 мс | 1 января 1980 г. - 31 декабря 2099 г. |
INT 21h, AH = 2Ch СИСТЕМНОЕ ВРЕМЯ [6] INT 21h, AH = 2Ah СИСТЕМНАЯ ДАТА [7] | |||
iOS ( Apple ) | CFAbsoluteTimeGetCurrent () [8] | <1 мс | 1 января 2001 г. ± 10 000 лет |
macOS | CFAbsoluteTimeGetCurrent () [9] | <1 мс [10] [примечание 1] | 1 января 2001 г. ± 10 000 лет [10] [примечание 1] |
OpenVMS | SYS $ GETTIM () | 100 нс [11] | С 17 ноября 1858 г. по 31 июля 31 086 [12] |
() | 1 мкс [13] | 1 января 1970 г. по 7 февраля 2106 г. [14] | |
() | 1 нс [13] | ||
z / OS | STCK [15] : 7–187 | 2 −12 мкс 244,14 пс [15] : 4–45, 4–46 | С 1 января 1900 г. по 17 сентября 2042 г. UT [16] |
STCKE | 1 января 1990 г. до 36 765 г. н.э. [17] | ||
Unix , POSIX (см. Также функции даты и времени C ) | $дата время () | 1 с | (*) 1 января 1970 г. по 19 января 2038 г. 1 января 1970 г. до 292 277 026 596 н. Э. |
() | 1 мкс | ||
() | 1 нс | ||
OS / 2 | DosGetDateTime () | 10 мс | С 1 января 1980 года по 31 декабря 2079 года [18] |
Окна | GetSystemTime () | 1 мс | 1 января 1601 г. по 14 сентября 30 828 г. [19] |
GetSystemTimeAsFileTime () | 100 нс | ||
GetSystemTimePreciseAsFileTime () |
Языки программирования и приложения
Язык / Приложение | Функция или переменная | разрешение | Эпоха или диапазон |
---|---|---|---|
Ада | Ada.Calendar.Clock | От 100 мкс до 20 мс (*) | 1 января 1901 г. - 31 декабря 2099 г. (*) |
AWK | systime () | 1 с | (*) |
BASIC , True BASIC | DATE , DATE $ TIME , TIME $ | 1 с | (*) |
БАЗОВЫЙ БИЗНЕС | ДЕНЬ , ТИМ | 0,1 с | (*) |
C (см. Функции даты и времени C ) | время() | 1 с (*) [примечание 2] | (*) [примечание 2] |
C ++ | std :: time () std :: chrono :: system_clock :: now () | 1 с (*) [примечание 2] 1 нс (C ++ 11, зависит от ОС) | (*) [примечание 2] |
C # | System.DateTime.Now [20] System.DateTime.UtcNow [21] | 100 нс [22] | 1 января 0001 г. по 31 декабря 9999 г. |
CICS | ASKTIME | 1 мс | 1 января 1900 г. |
КОБОЛ | ФУНКЦИЯ ТЕКУЩАЯ ДАТА | 1 с | 1 января 1601 г. |
Common Lisp | (получить универсальное время) | 1 с | 1 января 1900 г. |
Дельфи ( Borland ) | дата время | 1 мс (с плавающей точкой) | 1 января 1900 г. |
Delphi ( Embarcadero Technologies ) [23] | System.SysUtils.Time [24] | 1 мс | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 г. 23: 59: 59: 999 [sic] |
System.SysUtils.GetTime [25] (псевдоним для System.SysUtils.Time ) | |||
System.SysUtils.Date [26] | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 года 0: 0: 0: 000 [sic] | ||
System.DateUtils.Today [27] | |||
System.DateUtils.Tomorrow [28] | |||
System.DateUtils.Вчера [29] | |||
System.SysUtils.Now [30] | 1 с | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 г. 23: 59: 59: 000 [sic] | |
System.SysUtils.DayOfWeek [31] | 1 день | От 1 до 7 | |
System.SysUtils.CurrentYear [32] | 1 год | (*) | |
Emacs Lisp | (Текущее время) | 1 мкс (*) | 1 января 1970 г. |
Erlang | erlang: system_time () , os: system_time () [33] | Зависит от ОС , например, в Linux 1ns [33] | 1 января 1970 г. [33] |
Excel | Дата() | ? | 0 января 1900 г. [34] |
Фортран | DATE_AND_TIME SYSTEM_CLOCK | (*) [35] [36] | 1 января 1970 г. |
CPU_TIME | 1 мкс | ||
Идти | time.Now () | 1 нс | 1 января 0001 г. |
Haskell | Time.getClockTime | 1 шт. (*) | 1 января 1970 г. (*) |
Data.Time.getCurrentTime | 1 шт. (*) | 17 ноября 1858 г. (*) | |
Ява | java.util.Date () System.currentTimeMillis () | 1 мс | 1 января 1970 г. |
System.nanoTime () [37] | 1 нс | произвольный [37] | |
Clock.systemUTC () [38] | 1 нс | произвольный [39] | |
JavaScript , TypeScript | (новая дата ()). getTime () Date.now () | 1 мс | 1 января 1970 г. |
Matlab | сейчас | 1 с | 0 января 0000 [40] |
Швабры | $ H ( сокращение от $ HOROLOG ) | 1 с | 31 декабря 1840 г. |
LabVIEW | Счетчик тиков | 1 мс | 00: 00: 00.000 1 января 1904 г. |
Получить дату / время в секундах | 1 мс | 00: 00: 00.000 1 января 1904 г. | |
Цель-C | [NSDate timeIntervalSinceReferenceDate] | <1 мс [41] | 1 января 2001 г. ± 10 000 лет [41] |
OCaml | Unix.time () | 1 с | 1 января 1970 г. |
Unix.gettimeofday () | 1 мкс | ||
Расширенный Паскаль | GetTimeStamp () | 1 с | (*) |
Турбо Паскаль | GetTime () GetDate () | 10 мс | (*) |
Perl | время() | 1 с | 1 января 1970 г. |
Время :: HiRes :: время [42] | 1 мкс | ||
PHP | время () mktime () | 1 с | 1 января 1970 г. |
microtime () | 1 мкс | ||
PureBasic | Дата() | 1 с | 1 января 1970 г. - 19 января 2038 г. |
Python | datetime.now (). отметка времени () | 1 мкс (*) | 1 января 1970 г. |
РПГ | ТЕКУЩИЙ (ДАТА) , % ДАТА ТЕКУЩИЙ (ВРЕМЯ) , % ВРЕМЯ | 1 с | 1 января 0001 г. по 31 декабря 9999 г. |
ТОК (TIMESTAMP) , TIMESTAMP% | 1 мкс | ||
Рубин | Time.now () [43] | 1 мкс (*) | 1 января 1970 г. (до 19 января 2038 г. до Ruby 1.9.2 [44] ) |
Болтовня | Время микросекунды, часы (VisualWorks) | 1 с (ANSI) 1 мкс (VisualWorks) 1 с (писк) | 1 января 1901 г. (*) |
Общее время Секунды (Писк) | |||
SystemClock тикиNowSinceSystemClockEpoch (Chronos) | |||
SQL | CURDATE () или CURRENT DATE CURTIME () или CURRENT TIME GETDATE () NOW () или CURRENT TIMESTAMP SYSDATE () | 3 мс | 1 января 1753 г. по 31 декабря 9999 г. (*) |
60 с | 1 января 1900 г. - 6 июня 2079 г. | ||
Стандартный ML | Time.now () | 1 мкс (*) | 1 января 1970 г. (*) |
TCL | [часы в секундах] | 1 с | 1 января 1970 г. |
[часы миллисекунды] | 1 мс | ||
[часы микросекунды] | 1 мкс | ||
[щелчки часов] | 1 мкс (*) | (*) | |
Windows PowerShell | Дата получения [45] [46] | 100 нс [22] | 1 января 0001 г. по 31 декабря 9999 г. |
[DateTime] :: Now [20] [DateTime] :: UtcNow [21] | |||
Visual Basic .NET | System.DateTime.Now [20] System.DateTime.UtcNow [21] | 100 нс [22] | 1 января 0001 г. по 31 декабря 9999 г. |
Смотрите также
- Календарь
- Время вычисления
- ДАТА (команда)
- Эпоха
- Время GPS
- Джиффи
- Сетевой протокол времени
- Процесс
- дата
- ВРЕМЯ (команда)
- time.h
- time_t
- Ошибки форматирования и хранения времени
- Протокол ВРЕМЕНИ
- Совместное времяпровождение
- Стандарт времени
- Таймер
- Отметка времени
- Команда даты Unix
- Время Unix
- Команда времени Unix
- Настенные часы
- Проблема 2000 года
- Проблема 2038 года
Заметки
- ^ a b В документации для разработчиков Apple неясно точность и диапазон CFAbsoluteTime / CFTimeInterval, за исключением документации CFRunLoopTimerCreate, в которой говорится о точности «не более субмиллисекунды». Однако аналогичный тип NSTimeInterval кажется взаимозаменяемым, и в нем указаны точность и диапазон.
- ^ Б с д стандартная библиотека С не определяет разрешение конкретных, эпоху, диапазон или тип данных для значений времени системы . Библиотека C ++ включает в себя библиотеку C, поэтому в ней используется та же реализация системного времени, что и в C.
Рекомендации
- ^ Ральф Д. Браун (2000). «Int 0x1A, AH = 0x00» . Список прерываний Ральфа Брауна .
- ^ Ральф Д. Браун (2000). «Int 0x1A, AH = 0x02» . Список прерываний Ральфа Брауна .
- ^ Ральф Д. Браун (2000). «Int 0x1A, AH = 0x04» . Список прерываний Ральфа Брауна .
- ^ «Руководство по операционной системе CP / M Plus (CP / M версии 3.0)» (PDF) .
- ^ «Системные вызовы BDOS» .
- ^ Ральф Д. Браун (2000). «Int 0x21, AH = 0x2c» . Список прерываний Ральфа Брауна .
- ^ Ральф Д. Браун (2000). «Int 0x21, AH = 0x2a» . Список прерываний Ральфа Брауна .
- ^ «Справочник по утилитам времени» . Библиотека разработчика iOS . 2007 г.
- ^ «Справочник по утилитам времени» . Mac OS X Developer Library . 2007 г.
- ^ а б «CFRunLoopTimerCreate - Основа ядра» . Документация для разработчиков Apple . 2007 г.
- ^ Рут Э. Гольденберг; Лоуренс Дж. Кена; Дениз Э. Дюма (1991). VAX / VMS Внутреннее устройство и структуры данных, версия 5.2 . Цифровая пресса. ISBN 978-1555580599.
- ^ «Почему среда, 17 ноября 1858 г. - базовое время для OpenVMS (VAX VMS)?» . Стэнфордский университет . 24 июля 1997 года. Архивировано 24 июля 1997 года . Проверено 8 января 2020 года .
- ^ а б «Справочное руководство по библиотеке времени выполнения VSI C для систем OpenVMS» (PDF) . VSI. Ноябрь 2020 . Проверено 17 апреля 2021 .
- ^ «OpenVMS и 2038 год» . HP . Проверено 17 апреля 2021 .
- ^ а б z / Принципы работы архитектуры (PDF) . Покипси, Нью-Йорк: Машины международного бизнеса. 2007 г.
- ^ IBM намеревается расширить диапазон дат для будущих систем после 2042 года. Z / Принципы работы архитектуры , (Покипси, Нью-Йорк: International Business Machines, 2007) 1-15, 4-45 до 4-47.
- ^ «Расширенные 64-битные значения времени» . IBM . Проверено 18 апреля 2021 .
- ^ Джонатан де Бойн Поллард. «32-битный интерпретатор команд» .
В OS / 2 Warp 4 дата и время могут работать далеко за пределами 2000 года и даже за пределами 2038 года, а фактически до 2079 года, что является пределом для часов реального времени OS / 2 Warp 4. .
- ^ Андерс Тулин (6 апреля 2013 г.). «Интерпретация меток времени NTFS» . Криминалистический фокус .
- ^ а б в «Свойство DateTime.Now» . Документы Microsoft .
- ^ а б в «Свойство DateTime.UtcNow» . Документы Microsoft .
- ^ а б в «Свойство DateTime.Ticks» . Документы Microsoft .
- ^ «Поддержка даты и времени» . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.Time" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.GetTime" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.Date" . Сеть разработчиков Embarcadero '. 2013.
- ^ "System.DateUtils.Today" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.DateUtils.Tomorrow" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.DateUtils.Yesterday" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.Now" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.DayOfWeek" . Сеть разработчиков Embarcadero . 2013.
- ^ "System.SysUtils.CurrentYear" . Сеть разработчиков Embarcadero . 2013.
- ^ a b c Время и временная коррекция в Erlang
- ^ «XL2000: ранние даты создания компонентов электронных таблиц Office отличаются от Excel» . Служба поддержки Microsoft . 2003. Архивировано из оригинального 24 -го октября 2007 года
в электронной таблице Microsoft Office компонент, значение 0 соответствует значению даты 30 декабря 1899 и значение 1 равно 31 декабря 1899. ... В Excel, значение 0 соответствует значению до 0 января 1900 года, а значение 1 соответствует 1 января 1900 года.
- ^ «SYSTEM_CLOCK» . Руководство и справочник разработчика Intel Fortran Compiler 19.0 . 29 апреля 2019 . Проверено 23 июля 2019 года .
- ^ «SYSTEM_CLOCK - функция времени» . Компилятор GNU Fortran . Проверено 27 октября 2011 года .
- ^ а б "Метод System.nanoTime ()" . Платформа Java, Standard Edition 6: Спецификация API . 2015 . Проверено 23 июля 2019 года .
- ^ "Clock.systemUTC () и другие методы" . Платформа Java, Standard Edition 8: Спецификация API . 2014 . Проверено 15 января 2015 года .
- ^ «Система времени Java JSR-310» . Платформа Java, Standard Edition 8: Спецификация API . 2014 . Проверено 15 января 2015 года .
- ^ «Справка по Matlab» .
- ^ а б «NSTimeInterval - Foundation» . Документация для разработчиков Apple .
- ^ Дуглас Wegscheild, Р. Schertler и Яркко Hietaniemi, «Время :: HiRes» . CPAN - всеобъемлющая сеть архивов Perl . 2011 . Проверено 27 октября 2011 года .
- ^ Джеймс Бритт; Нейрогами. «Класс времени» . Ruby-Doc.org: Справка и документация по языку программирования Ruby . Скоттсдейл, Аризона . Проверено 27 октября 2011 года .
- ^ Югуи (18 августа 2010 г.). «Выпущен Ruby 1.9.2» .
Новая версия 1.9.2 почти совместима с 1.9.1, за исключением следующих изменений: ... Время переопределено. Исправлена ошибка с 2038 годом.
- ^ «Использование командлета Get-Date» . Документы Microsoft . Проверено 23 июля 2019 года .
- ^ «Совет недели по Windows PowerShell - форматирование даты и времени» . Документы Microsoft . Проверено 23 июля 2019 года .
Внешние ссылки
- Critical and Significant Dates , JR Stockton (получено 3 декабря 2015 г.)
- Библиотека даты и времени ускорения (C ++)
- Библиотека Boost Chrono (C ++)
- Библиотека даты и времени Chronos (Smalltalk)
- Joda Time , Библиотека даты и времени Joda (Java)
- Проект Perl DateTime (Perl)
- дата: Документация стандартной библиотеки Ruby (Ruby)