В информатике и компьютерном программировании , системное время представляет понятие компьютерной системе , по прошествии времени. В этом смысле время также включает дни в календаре .
Системное время измеряется часами системы , которая , как правило , реализуется как простой подсчет числа клещей , которые произошли с момента произвольной начальной даты, называемой эпохой . Например, системы, совместимые с 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), дополнительных секунд и настроек локали пользователя . Также обычно предоставляются библиотечные подпрограммы, которые преобразуют календарное время в системное время.
Другие измерения времени [ править ]
С системным временем тесно связано время процесса , которое является подсчетом общего времени ЦП, потребляемого выполняющимся процессом . Оно может быть разделено на пользовательское и системное процессорное время, представляющее время, потраченное на выполнение пользовательского кода и кода ядра системы соответственно. Время процесса - это сумма инструкций процессора или тактовых циклов и, как правило, не имеет прямой зависимости от времени на стене .
Файловые системы отслеживают время создания, изменения и / или доступа к файлам, сохраняя временные метки в блоке управления файлом (или индексном узле ) каждого файла и каталога .
История [ править ]
Большинство персональных компьютеров первого поколения не отслеживали дату и время. К ним относятся системы, работающие под управлением операционной системы CP / M , а также ранние модели Apple II , BBC Micro и Commodore PET , среди прочих. Дополнительные периферийные платы, которые включали микросхемы часов реального времени со встроенной резервной батареей, были доступны для IBM PC и XT , но IBM AT был первым широко доступным ПК, оснащенным оборудованием даты / времени, встроенным в материнская плата . До повсеместной доступностикомпьютерные сети , большинство персональных компьютерных систем, которые отслеживали системное время, делали это только относительно местного времени и не делали поправок на разные часовые пояса .
Благодаря современным технологиям большинство современных компьютеров отслеживают местное гражданское время, как и многие другие домашние и личные устройства, такие как видеомагнитофоны , видеорегистраторы , приемники кабельного телевидения , КПК , пейджеры , сотовые телефоны , факсы , автоответчики , фотоаппараты , видеокамеры и т. Д. центральные кондиционеры и микроволновые печи .
Микроконтроллеры, работающие во встроенных системах (таких как Raspberry Pi , Arduino и другие подобные системы ), не всегда имеют внутреннее оборудование для отслеживания времени. Многие такие системы контроллеров работают без информации о внешнем времени. Те, кому требуется такая информация, обычно инициализируют свое базовое время после перезагрузки , получая текущее время из внешнего источника, такого как сервер времени или внешние часы, или предлагая пользователю вручную ввести текущее время.
Реализация [ править ]
Системного тактового сигнала , как правило , реализован в виде программируемого таймера интервала , который периодически прерывает процессор, который затем начинает выполнение таймера прерывания процедуры обслуживания. Эта процедура обычно добавляет один тик к системным часам (простой счетчик) и обрабатывает другие периодические служебные задачи ( вытеснение и т. Д.), Прежде чем вернуться к задаче, которую ЦП выполнял до прерывания.
Получение системного времени [ править ]
01 мая 2021 12:35:33 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 , секунда (BCD) | 1 с | 1 января 1978 г. - сентябрь 2067 г. |
BDOS функция 69h > ( T_GET ): [5] слово , дни начиная с 1 января 1978 байт , Hour (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 г. |
микровремя () | 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 г.
- ^ a b "CFRunLoopTimerCreate - Основа ядра" . Документация для разработчиков Apple . 2007 г.
- ^ Рут Э. Гольденберг; Лоуренс Дж. Кена; Дениз Э. Дюма (1991). VAX / VMS Внутреннее устройство и структуры данных, версия 5.2 . Цифровая пресса. ISBN 978-1555580599.
- ^ "Почему среда, 17 ноября 1858 г. - базовое время для OpenVMS (VAX VMS)?" . Стэнфордский университет . 24 июля 1997 года. Архивировано 24 июля 1997 года . Проверено 8 января 2020 года .
- ^ a b «Справочное руководство по библиотеке времени выполнения VSI C для систем OpenVMS» (PDF) . VSI. Ноябрь 2020 . Проверено 17 апреля 2021 .
- ^ «OpenVMS и 2038 год» . HP . Проверено 17 апреля 2021 .
- ^ a b 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» . Криминалистический фокус .
- ^ a b c «Свойство DateTime.Now» . Документы Microsoft .
- ^ a b c «Свойство DateTime.UtcNow» . Документы Microsoft .
- ^ a b c «Свойство 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 года.
- ^ "СИСТЕМА_ЧАСОВ" . Руководство и справочник разработчика Intel Fortran Compiler 19.0 . 29 апреля 2019 . Проверено 23 июля 2019 года .
- ^ "SYSTEM_CLOCK - Функция времени" . Компилятор GNU Fortran . Проверено 27 октября 2011 года .
- ^ a b "Метод 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" .
- ^ a b "NSTimeInterval - Foundation" . Документация для разработчиков Apple .
- ^ Дуглас Wegscheild, Р. Schertler и Яркко Hietaniemi, "Time :: HiRes" . CPAN - Комплексная сеть архивов Perl . 2011 . Проверено 27 октября 2011 года .
- ^ Джеймс Бритт; Нейрогами. «Класс времени» . Ruby-Doc.org: Справка и документация по языку программирования Ruby . Скоттсдейл, Аризона . Проверено 27 октября 2011 года .
- ^ Yugui (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)