Я всегда использую timestamps unix для всего, но мне интересно, есть ли лучший способ.
Что вы используете для хранения временных меток и почему?
Я всегда использую timestamps unix для всего, но мне интересно, есть ли лучший способ.
Что вы используете для хранения временных меток и почему?
Однако вы решили сохранить временную метку, важно избегать проблем с региональной интерпретацией и проблем со смещением по времени. Временная метка Unix интерпретируется одинаково независимо от региона и рассчитывается с одного и того же момента времени независимо от часового пояса - это хорошие вещи.
Остерегайтесь хранить метки времени как неоднозначные строки, такие как 01/02/2008, так как это можно интерпретировать как 02 января 2008 г. или 01 февраля 2008 г. в зависимости от языка.
При хранении часов/минут/секунд важно знать, "какой" час/минута/секунда указывается. Вы можете сделать это, включив информацию о часовом поясе (не требуется для отметки времени Unix, поскольку она считается UTC).
Однако обратите внимание, что временные метки Unix не могут однозначно представлять некоторые моменты времени: когда в UTC есть секунда скачка, временная метка Unix не изменяется, поэтому оба 23:59:60 UTC и 00:00:00 на следующий день имеют одинаковое представление Unix. Поэтому, если вам действительно нужно разрешение в секунду или лучше, рассмотрите другой формат.
Если вы предпочитаете более удобный для чтения формат для хранения данных, чем временную метку Unix, рассмотрите ISO 8601.
Один из методов, который помогает держать вещи в прямом направлении, - это хранить даты как UTC и применять только временные интервалы или смещения DST при отображении даты для пользователя.
Если вы храните файл журнала, пожалуйста, за любовь к птенцу сделайте его читаемым человеком и лексически-сортируемым.
2008-10-07 09:47:02 например.
32-разрядные временные метки Unix будут переполняться через несколько лет (январь 2038 г.), так что это может быть рассмотрено. Обычно я использую формат DATETIME в SQL, который является YYYY-MM-DD HH: MM: SS со временем в виде 24-часового часа. Я пытаюсь вывести файлы в том же формате, чтобы облегчить мне жизнь.
Какую эпоху нужно хранить и решать? Если вам нужны микросекунды, или даты в каменном веке time_t, возможно, не самые лучшие. Для общих деловых целей это довольно хорошо (при условии 64-битного)
Это зависит от того, для чего вам нужны временные метки.
Временная метка unix не может представлять время 1 секунда после 2008-12-31T23: 59: 59Z. Если вы делаете "2009-01-01T09: 00: 00 '-" 2008-12-31T09: 00: 00 "с временными отметками unix, результат НЕ правильный: между этими двумя датами будет секундомер, и они разделены на 86401 секунд (а не 86400, как будут отмечаться временные метки unix).
Кроме того, что и другие ответчики сказали, да - временные метки unix - это путь:)
Временная метка не является хорошей идеей для баз данных, поскольку они не учитывают летнее время или текущее местное время. В MySQL лучше сохранить его как время, а затем использовать функции даты и времени MySQL, чтобы вернуть нужные вам детали или сравнить к другим датам.
timeval-style (time_t + microseconds), если мне нужна точность второй секунды, иначе justtime_t. Вы можете использовать 64-разрядное целочисленное значение для хранения time_t * 1000000 + usec, и вы переполнены до +/- 292 000 лет.
32-разрядная проблема UNIX Timestamp кажется довольно раздражающей для пользователей, которые вводят будущие даты в 2038 +.
Используйте либо последовательность DATETIME для MySQL, либо сохраняйте свои даты как BIGINT (8) unsigned (макс. 18 квинтиллионов) или FLOAT, чтобы вы могли вводить большие числа. Тогда вы не можете использовать, например, функцию PHP date(), поскольку она позволяет только целые числа в качестве параметра (ограниченные 32-битными системами).
Решение, которое я нашел, заключается в использовании PHP 5.2.0. Вот решение DateTime PHP.
Не нужно изменять формат UNIX_TIMESTAMP. Пока у вас есть BIGINT (8) без знака как хранилище MySQL для временных меток. Вы больше не будете ограничены 32-битными системами.
Временная метка базовой:
И как момент времени имеет бесконечное разрешение, важно выбрать формат timestamp: достаточно ли разрешения?
Для большинства приложений у меня было достаточно наносекунд. Так что Java Timestamp для меня до сих пор имел правильное решение.