У меня есть строка типа 2012-01-01T01:02:03.456
, которую я храню в базе данных Postgres TIMESTAMP с помощью ActiveRecord.
К сожалению, Ruby, похоже, отрубает миллисекунды:
ruby-1.9.3-rc1 :078 > '2012-12-31T01:01:01.232323+3'.to_datetime
=> Mon, 31 Dec 2012 01:01:01 +0300
Postgrs поддерживает разрешение микросекунды. Как я могу получить соответствующую метку времени? Мне нужно разрешение не менее миллисекунды.
(PS Да, я мог бы взломать целочисленный столбец в миллисекундах в postgres, этот вид побеждает всю цель ActiveRecord.)
UPDATE:
Очень полезные ответы показали, что Ruby DateTime
не прерывает миллисекунды; используя #to_f
показывает это. Но, делая:
m.happened_at = '2012-01-01T00:00:00.32323'.to_datetime
m.save!
m.reload
m.happened_at.to_f
Отбрасывает миллисекунды.
Теперь интересно, что created_at
показывает миллисекунды, как в Rails, так и в Postgres. Но другие поля временных меток (например, happened_at
выше) этого не делают. (Возможно, Rails использует функцию NOW()
для created_at
, а не для передачи в DateTime).
Что приводит к моему окончательному вопросу:
Как я могу получить ActiveRecord для сохранения миллисекундного разрешения в полях timestamp?