Подтвердить что ты не робот

Являются ли временные метки unix лучшим способом для хранения временных меток?

Я всегда использую timestamps unix для всего, но мне интересно, есть ли лучший способ.

Что вы используете для хранения временных меток и почему?

4b9b3361

Ответ 1

Однако вы решили сохранить временную метку, важно избегать проблем с региональной интерпретацией и проблем со смещением по времени. Временная метка 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 при отображении даты для пользователя.

Ответ 2

Если вы храните файл журнала, пожалуйста, за любовь к птенцу сделайте его читаемым человеком и лексически-сортируемым.

2008-10-07 09:47:02 например.

Ответ 3

32-разрядные временные метки Unix будут переполняться через несколько лет (январь 2038 г.), так что это может быть рассмотрено. Обычно я использую формат DATETIME в SQL, который является YYYY-MM-DD HH: MM: SS со временем в виде 24-часового часа. Я пытаюсь вывести файлы в том же формате, чтобы облегчить мне жизнь.

Ответ 4

Какую эпоху нужно хранить и решать? Если вам нужны микросекунды, или даты в каменном веке time_t, возможно, не самые лучшие. Для общих деловых целей это довольно хорошо (при условии 64-битного)

Ответ 5

Это зависит от того, для чего вам нужны временные метки.

Временная метка unix не может представлять время 1 секунда после 2008-12-31T23: 59: 59Z. Если вы делаете "2009-01-01T09: 00: 00 '-" 2008-12-31T09: 00: 00 "с временными отметками unix, результат НЕ правильный: между этими двумя датами будет секундомер, и они разделены на 86401 секунд (а не 86400, как будут отмечаться временные метки unix).

Кроме того, что и другие ответчики сказали, да - временные метки unix - это путь:)

Ответ 6

Временная метка не является хорошей идеей для баз данных, поскольку они не учитывают летнее время или текущее местное время. В MySQL лучше сохранить его как время, а затем использовать функции даты и времени MySQL, чтобы вернуть нужные вам детали или сравнить к другим датам.

Ответ 7

timeval-style (time_t + microseconds), если мне нужна точность второй секунды, иначе justtime_t. Вы можете использовать 64-разрядное целочисленное значение для хранения time_t * 1000000 + usec, и вы переполнены до +/- 292 000 лет.

Ответ 8

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-битными системами.

Ответ 9

Временная метка базовой:

  • отчетливый момент времени

И как момент времени имеет бесконечное разрешение, важно выбрать формат timestamp: достаточно ли разрешения?

  • Unix time подсчитывается только в секундах.
  • Ext 4 имеет наносекунды
  • Java имеет наносекунды

Для большинства приложений у меня было достаточно наносекунд. Так что Java Timestamp для меня до сих пор имел правильное решение.