Тип
DateTime
имеет поле с именем microsecond
.Это кортеж, обозначающий значение и точности.
iex|1 ▶ DateTime.from_naive!(
...|1 ▶ ~N[2016-05-24 13:26:08], "Etc/UTC").microsecond
#⇒ {0, 0}
iex|2 ▶ DateTime.from_naive!(
...|2 ▶ ~N[2016-05-24 13:26:08.123456], "Etc/UTC").microsecond
#⇒ {123456, 6}
Как можно видеть, если действительное значение действительно не имеет микросекунд, точность равна нулю.
Предполагается, чтозначение в базе данных, возвращаемое my_thing.inserted_at
, имеет точность микросекунд, можно просто:
~N[2016-05-24 13:26:08.123456]
|> DateTime.from_naive!("Etc/UTC")
|> DateTime.add(10 * 24 * 60 * 60) # 10 × seconds in a day
#⇒ #DateTime<2016-06-03 13:26:08.123456Z>
Если значение не имеет точности микросекунд,
iex|3 ▶ DateTime.from_naive!(~N[2016-05-24 13:26:08], "Etc/UTC")
# PRECISION ⇒ ZERO! ⇓⇓⇓
#⇒ #DateTime<2016-05-24 13:26:08Z>
можно всегда установить его вручную:
with dt <- DateTime.from_naive!(~N[2016-05-24 13:26:08], "Etc/UTC"),
do: %DateTime{dt | microsecond: {elem(dt.microsecond, 0), 6}}
#⇒ #DateTime<2016-05-24 13:26:08.000000Z>
Последний теперь может быть вставлен в базу данных.