Ich habe diese Funktion in meinem Code:Handhabung Datetime Präzision> 6 in Elixir
defp to_date({year, month, day}), do: NaiveDateTime.from_erl!({{year, month, day}, {0, 0, 0}}, {0, 6}) |> NaiveDateTime.to_string()
defp to_date({{year, month, day}, {hour, min, sec, msec}}) when msec < 1000000,
do: NaiveDateTime.from_erl!({{year, month, day}, {hour, min, sec}}, {msec, 6}) |> NaiveDateTime.to_string()
defp to_date(x), do: x
Wie würden Sie Fälle, wenn msec > 6-digits
behandeln.
Ziehen von Daten aus einem SQL Server datetime2(7)
mit der Tds Bibliothek funktioniert gut:
iex(45)> r = Tds.Connection.query(:RMASDB, "select * from users where user_id = 1" , [])
{:ok,
%Tds.Result{columns: ["user_id", "name", "email", "mobiles", "password", "roles", "active", "reset_required", "last_login", "has_picture", "last_modified", "last_modified_by"], command: nil, num_rows: 1,
rows: [[1, "Charles Okwuagwu", "[email protected]", "mobile1, mobile2", "/eNvuOyr5N6HxgYdz3fK7A==|QHx/sOa3Se0C3ZeLSNtT97SCsuWL11SJeLykms7faGY=", "Administrator", true, false,
{{2017, 11, 30}, {18, 37, 26, 2690120}}, true, {{2017, 11, 30}, {0, 0, 0, 0}}, 1]]}}
aber die Verarbeitung die Termine mit meinem Code unten wirft diese Ausnahme:
iex(46)> DB.get(DB.Users, "select * from users where user_id = 1")
** (ArgumentError) cannot convert {{2017, 11, 30}, {18, 37, 26}} to naive datetime, reason: :invalid_time
(elixir) lib/calendar/naive_datetime.ex:549: NaiveDateTime.from_erl!/2
(rmas) lib/db.ex:34: DB.to_date/1
(elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
(elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
(rmas) lib/db.ex:26: anonymous fn/3 in DB._objects/3
(elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
(rmas) lib/db.ex:17: DB.get/3
Der Quelldaten-Wert ist : {{2017, 11, 30}, {18, 37, 26, 2690120}}
Ihre Exception zeigt ein Zeittupel mit 3 Elementen an, während Ihr Quelldatenwert 4 Elemente angibt. Was ist der richtige? –
@JonasDellinger der Quellwert ist 4 Elemente, es ist ein Erlang Zeit-Format –
Elixirs Fehlerberichterstattung zeigt nur 3 Elemente aus irgendeinem Grund –