Unix Time е обикновено 32-битов брой цели секунди от първият момент от 1970 г. по UTC, като епоха е 1 January 1970 00:00:00 UTC
. Това означава диапазон от около 136 години с около половината от двете страни на епохата. Отрицателните числа са по-ранни, нулата е епохата, а положителните са по-късни. За 32-битово цяло число със знак стойностите варират от 1901-12-13
до 2038-01-19 03:14:07 UTC
.
Това не е написано на камък. Е, това е написано, но в куп различни камъни. По-старите казват 32-битови, по-новите 64-битови. Някои спецификации казват, че значението е дефинирано от изпълнението. Някои Unix системи използват unsigned int за разширяване само в бъдещето през епохата, но обичайната практика е число със знак. Някои използват float вместо цяло число. За подробности вижте статията в Уикипедия за Unix Time и този Въпрос.
Така че, по същество, вашият въпрос няма смисъл. Трябва да знаете контекста на вашия език за програмиране (стандартен C, друг C, Java и т.н.), среда (съвместим с POSIX), конкретна софтуерна библиотека, или хранилище на база данни, или приложение.
Избягвайте Count-From-Epoch
Добавете към тази липса на специфичност факта, че няколко дузини други епохи имат се използва от различни софтуерни системи, някои изключително популярни и често срещани. Примерите включват 1 януари 1601 г. за файлова система NTFS и COBOL, 1 януари 1980 г. за различни файлови системи FAT, 1 януари 2001 г. за Apple Cocoa и 0 януари 1900 г. за електронни таблици Excel & Lotus 1-2-3.
Допълнително добавете факта, че са използвани различни степени на преброяване. Освен цели секунди, някои системи използват милисекунди, микросекунди или наносекунди.
Препоръчвам да не проследявате дата-час като отброяване от епоха. Вместо това използвайте специфични типове данни, където са налични във вашия език за програмиране или база данни.
ISO 8601
Когато типовете данни не са налични или когато обменяте данни, следвайте стандарта ISO 8601, който дефинира разумно низови формати за различни видове стойности за дата-час.
- Date
- A date-time with an offset from UTC (Z is zero/Zulu for UTC) (note padding zero on offset)
2015-07-29T14:59:08Z
2001-02-13T12:34:56.123+05:30
- Week (with or without day of week)
- Ordinal date (day-of-year)
- Interval
"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
- Duration (format of
PnYnMnDTnHnMnS
)
P3Y6M4DT12H30M5S
= "period of three years, six months, four days, twelve hours, thirty minutes, and five seconds"
Потърсете в StackOverflow.com много повече въпроси и отговори по тези теми.
person
Basil Bourque
schedule
29.07.2015
time_t
е подписано 32-битово int, така че може да се върне към 1901 г., както отбелязахте. Трябва да проверите вашата операционна система, много са разширилиtime_t
до 64 бита, което ви дава няколкостотин милиарда години свобода на действие. - person Dan Lowe   schedule 29.07.2015