Системное время - System time
В Информатика и компьютерное программирование, Системное время представляет собой представление компьютерной системы о течении времени. В этом смысле, время также включает передачу дни в календаре.
Системное время измеряется системные часы, который обычно реализуется как простой подсчет количества клещи произошедшие с некоторой произвольной даты начала, называемые эпоха. Например, Unix и POSIX -совместимые системы кодируют системное время ("Время Unix ") как количество секунд, прошедших с начала Эпоха Unix на 1 января 1970 00:00:00 UT, за исключением високосные секунды. Системы, реализующие 32-битные и 64-битные версии Windows API, Такие как Windows 9x и Windows NT, укажите системное время как СИСТЕМНОЕ ВРЕМЯ, представленное как значение года / месяца / дня / часа / минуты / секунды / миллисекунд, и FILETIME, представленное как количество 100-наносекундных тиков с 1 января 1601 г. 00:00:00 UT, как указано в пролептический григорианский календарь.
Системное время можно преобразовать в календарное время, которая является формой, более подходящей для понимания человеком. Например, система Unix время 1000000000 секунды с начала эпохи переводятся в календарное время 9 сентября 2001 01:46:40 UT. Библиотека подпрограммы которые обрабатывают такие преобразования, могут также иметь дело с корректировками для часовые пояса, летнее время (Летнее время), високосные секунды, а пользователь регион настройки. Также обычно предоставляются библиотечные процедуры, которые преобразуют календарное время в системное время.
Другие измерения времени
Тесно связано с системным временем. время обработки, который является подсчетом общего ЦПУ время, затраченное на выполнение процесс. Его можно разделить на Пользователь и система Процессорное время, представляющее время, затраченное на выполнение кода пользователя и системы. ядро код соответственно. Время процесса - это подсчет CPU инструкции или же такты и обычно не имеют прямого отношения к настенное время.
Файловые системы отслеживать время создания, изменения и / или доступа к файлам путем сохранения отметки времени в блок управления файлами (или же индекс ) каждого файл и каталог.
История
Самое первое поколение персональные компьютеры не следил за датой и временем. К ним относятся системы, на которых CP / M операционная система, а также ранние модели Яблоко II, то BBC Micro, а Commodore PET, среди прочего. Добавить периферийные платы это включало часы реального времени чипы с бортовой Запасная батарея были доступны для IBM PC и XT, но IBM AT был первым широко доступным ПК, оснащенным оборудованием даты / времени, встроенным в материнская плата. До повсеместной доступности компьютерная сеть, большинство персональных компьютеров, которые отслеживали системное время, делали это только относительно местного времени и не делали поправок на разные часовые пояса.
Благодаря современным технологиям большинство современных компьютеров отслеживают местное гражданское время, как и многие другие домашние и личные устройства, такие как Видеомагнитофоны, Видеорегистраторы, приемники кабельного телевидения, КПК, пейджеры, сотовые телефоны, факсы, автоответчики, камеры, видеокамеры, центральные кондиционеры, и микроволновые печи.
Микроконтроллеры действующий в встроенные системы (такой как Raspberry Pi, Ардуино, и другие подобные системы ) не всегда есть внутреннее оборудование для отслеживания времени. Многие такие системы контроллеров работают без знания внешнего времени. Те, кому требуется такая информация, обычно инициализируют свое базовое время после перезагрузка получая текущее время из внешнего источника, например, из сервер времени или внешние часы, или побуждение пользователь может вручную ввести текущее время.
Выполнение
В системные часы обычно реализуется как программируемый интервальный таймер который периодически прерывает работу ЦП, который затем начинает выполнение процедуры обслуживания прерывания таймера. Эта процедура обычно добавляет один тик к системным часам (простой счетчик) и обрабатывает другие периодические служебные задачи (упреждение и т. д.) перед возвратом к задаче, которую ЦП выполнял до прерывания.
Получение системного времени
В следующих таблицах показаны методы получения системного времени в различных операционные системы, языки программирования, и Приложения. Значения, отмеченные (*), зависят от системы и могут отличаться в зависимости от реализации. Все даты указаны как Григорианский или же пролептический григорианский календарь даты.
Обратите внимание, что разрешающая способность измерения времени реализации не подразумевает того же точность таких измерений. Например, система может возвращать текущее время как значение, измеряемое в микросекундах, но на самом деле быть способной распознавать отдельные такты часов с частотой всего 100 Гц (10 мс).
Операционные системы
Операционная система | Команда или функция | Разрешение | Эпоха или диапазон |
---|---|---|---|
Android | java.lang | 1 мс | 1 января 1970 г. |
BIOS (IBM PC ) | INT 1Ah, AH = 00ч[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 69ч> (T_GET):[5] слово, Дней с 1 января 1978 г. байт, Час (BCD) байт, Минуты (BCD) байт, Второй (BCD) | |||
ДОС (Microsoft ) | C:>ДАТА C:>ВРЕМЯ | 10 мс | 1 января 1980 г. - 31 декабря 2099 г. |
INT 21h, AH = 2Ch СИСТЕМНОЕ ВРЕМЯ[6] INT 21h, AH = 2Ah ДАТА СИСТЕМЫ[7] | |||
iOS (яблоко ) | CFAbsoluteTimeGetCurrent ()[8] | <1 мс | 1 января 2001 г. ± 10 000 лет |
macOS | CFAbsoluteTimeGetCurrent ()[9] | <1 мс[10][примечание 1] | 1 января 2001 г. ± 10 000 лет[10][примечание 1] |
OpenVMS | SYS $ GETTIM () | 100 нс | 17 ноября 1858 г. до 31 086 г. |
z / OS | STCK[11]:7–187 | 2−12 мкс 244.14 л.с.[11]:4–45, 4–46 | С 1 января 1900 по 17 сентября 2042 UT[12] |
Unix, POSIX (смотрите также C функции даты и времени ) | $Дата время() | 1 с | (*) 1 января 1970 г. 19 января 2038 г. 1 января 1970 г. - 292 277 026 596 н. Э. |
() | 1 мкс | ||
() | 1 нс | ||
OS / 2 | DosGetDateTime () | 10 мс | 1 января 1980 г. - 31 декабря 2079 г.[13] |
Windows | GetSystemTime () | 1 мс | 1 января 1601 г. по 14 сентября 30828 г.[14] |
GetSystemTimeAsFileTime () | 100 нс | ||
GetSystemTimePreciseAsFileTime () |
Языки программирования и приложения
Язык / Приложение | Функция или переменная | Разрешение | Эпоха или диапазон |
---|---|---|---|
Ада | Ada.Calendar.Clock | От 100 мкс до 20 мс (*) | 1 января 1901 г. - 31 декабря 2099 г. (*) |
AWK | systime () | 1 с | (*) |
БАЗОВЫЙ, True BASIC | ДАТА, ДАТА $ ВРЕМЯ, ВРЕМЯ $ | 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[15] System.DateTime.UtcNow[16] | 100 нс[17] | 1 января 0001 г. по 31 декабря 9999 г. |
CICS | ASKTIME | 1 мс | 1 января 1900 г. |
КОБОЛ | ФУНКЦИЯ ТЕКУЩАЯ ДАТА | 1 с | 1 января 1601 г. |
Common Lisp | (получить универсальное время) | 1 с | 1 января 1900 г. |
Delphi (Borland ) | Дата время | 1 мс (плавающая точка) | 1 января 1900 г. |
Delphi (Embarcadero Technologies )[18] | System.SysUtils.Time[19] | 1 мс | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 г. 23: 59: 59: 999 [sic] |
System.SysUtils.GetTime[20] (псевдоним для System.SysUtils.Time) | |||
System.SysUtils.Date[21] | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 года 0: 0: 0: 000 [sic] | ||
System.DateUtils.Today[22] | |||
System.DateUtils.Tomorrow[23] | |||
System.DateUtils.Вчера[24] | |||
System.SysUtils.Now[25] | 1 с | 0/0/0000 0: 0: 0: 000 по 31 декабря 1999 г. 23: 59: 59: 000 [sic] | |
System.SysUtils.DayOfWeek[26] | 1 день | От 1 до 7 | |
System.SysUtils.CurrentYear[27] | 1 год | (*) | |
Emacs Lisp | (Текущее время) | 1 мкс (*) | 1 января 1970 г. |
Erlang | эрланг: system_time (), ос: system_time ()[28] | Операционные системы зависимый, например на Linux 1 нс[28] | 1 января 1970 г.[28] |
Excel | Дата() | ? | 0 января 1900[29] |
Фортран | ДАТА И ВРЕМЯ SYSTEM_CLOCK | (*)[30] | 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 ()[32] | 1 нс | произвольный[32] | |
Clock.systemUTC ()[33] | 1 нс | произвольный[34] | |
JavaScript, Машинопись | (новая дата ()). getTime () Date.now () | 1 мс | 1 января 1970 г. |
Matlab | сейчас же | 1 с | 0 января 0000[35] |
МАМПЫ | $ H (Короче для $ HOROLOG) | 1 с | 31 декабря 1840 г. |
LabVIEW | Счетчик тиков | 1 мс | 00: 00: 00.000 1 января 1904 г. |
Получить дату / время в секундах | 1 мс | 00: 00: 00.000 1 января 1904 г. | |
Цель-C | [NSDate timeIntervalSinceReferenceDate] | <1 мс[36] | 1 января 2001 г. ± 10 000 лет[36] |
OCaml | Unix.time () | 1 с | 1 января 1970 г. |
Unix.gettimeofday () | 1 мкс | ||
Расширенный Паскаль | GetTimeStamp () | 1 с | (*) |
Турбо Паскаль | GetTime () GetDate () | 10 мс | (*) |
Perl | время() | 1 с | 1 января 1970 г. |
Время :: HiRes :: время[37] | 1 мкс | ||
PHP | время() mktime () | 1 с | 1 января 1970 г. |
microtime () | 1 мкс | ||
PureBasic | Дата() | 1 с | 1 января 1970 г. - 19 января 2038 г. |
Python | datetime.now (). timestamp () | 1 мкс (*) | 1 января 1970 г. |
РПГ | ТЕКУЩАЯ ДАТА), %ДАТА ТЕКУЩЕЕ ВРЕМЯ), %ВРЕМЯ | 1 с | 1 января 0001 г. по 31 декабря 9999 г. |
ТЕКУЩИЙ (TIMESTAMP), % TIMESTAMP | 1 мкс | ||
Рубин | Time.now ()[38] | 1 мкс (*) | 1 января 1970 г. (до 19 января 2038 г. до Ruby 1.9.2[39]) |
Болтовня | Время микросекунды (VisualWorks) | 1 с (ANSI) 1 мкс (VisualWorks) 1 с (Писк) | 1 января 1901 г. (*) |
Общее время, секунды (Писк) | |||
SystemClock тикиNowSinceSystemClockEpoch (Хронос) | |||
SQL | CURDATE () или же ТЕКУЩАЯ ДАТА CURTIME () или же ТЕКУЩЕЕ ВРЕМЯ GETDATE () СЕЙЧАС ЖЕ() или же ТЕКУЩИЙ ВРЕМЯ 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 | Get-Date[40][41] | 100 нс[17] | 1 января 0001 г. по 31 декабря 9999 г. |
[DateTime] :: Сейчас[15] [DateTime] :: UtcNow[16] | |||
Visual Basic .NET | System.DateTime.Now[15] System.DateTime.UtcNow[16] | 100 нс[17] | 1 января 0001 г. по 31 декабря 9999 г. |
Смотрите также
- Календарь
- Время вычисления
- ДАТА (команда)
- Эпоха
- Время GPS
- Джиффи
- Сетевой протокол времени
- Процесс
- дата
- ВРЕМЯ (команда)
- time.h
- time_t
- Ошибки форматирования и хранения времени
- Протокол ВРЕМЕНИ
- Совместное времяпровождение
- Стандарт времени
- Таймер
- Отметка времени
- Команда даты Unix
- Время Unix
- Команда времени Unix
- Настенные часы
- Проблема 2000 года
- Проблема 2038 года
Примечания
- ^ а б В документации для разработчиков Apple неясно точность и диапазон CFAbsoluteTime / CFTimeInterval, за исключением документации CFRunLoopTimerCreate, в которой говорится о точности «не более субмиллисекунд». Однако подобный тип NSTimeInterval кажется взаимозаменяемым, и в нем указаны точность и диапазон.
- ^ а б c d В Стандартная библиотека C не указывает конкретное разрешение, эпоху, диапазон или тип данных для значения системного времени. Библиотека 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. 2007.
- ^ а б "CFRunLoopTimerCreate - Core Foundation". Документация для разработчиков Apple. 2007.
- ^ а б z / Архитектура Принципы работы (PDF). Покипси, Нью-Йорк: Машины международного бизнеса. 2007 г.
- ^ IBM намеревается расширить диапазон дат для будущих систем после 2042 года. z / Архитектура Принципы работы (Покипси, Нью-Йорк: International Business Machines, 2007) 1-15, 4-45–4-47.
- ^ Джонатан де Бойн Поллард. «32-битный интерпретатор команд».
В OS / 2 Warp 4 дата и время могут работать далеко за пределами 2000 года и даже за пределами 2038 года, а фактически до 2079 года, что является пределом для часов реального времени OS / 2 Warp 4. .
- ^ Андерс Тулин (6 апреля 2013 г.). «Интерпретация отметок времени NTFS». Криминалистический фокус.
- ^ а б c «Свойство DateTime.Now». Документы Microsoft.
- ^ а б c «Свойство DateTime.UtcNow». Документы Microsoft.
- ^ а б 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.
- ^ а б 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 - Фонд». Документация для разработчиков Apple.
- ^ Дуглас Вегшайльд, Р. Шертлер и Яркко Хиетаниеми, "Время :: 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.
внешняя ссылка
- Критические и знаменательные даты, Дж. Р. Стоктон (проверено 3 декабря 2015 г.)
- Библиотека даты и времени ускорения (C ++)
- Библиотека Boost Chrono (C ++)
- Библиотека даты и времени Chronos (Болтовня)
- Джода Тайм, Библиотека даты и времени Joda (Java)
- Проект Perl DateTime (Perl)
- дата: Документация стандартной библиотеки Ruby (Рубин)