2016-08-24 8 views
1

In Elixir, was ist der beste Weg, um eine Ecto.DateTime in ganze Millisekunden zu konvertieren?Konvertieren Ecto.DateTime in Millisekunden

Ich sah this example und glaube, dass ich es für Millisekunden angepasst habe, aber ich möchte wissen, ob es irgendwelche Einschränkungen für meinen Ansatz gibt.

(((datetime 
    |> Ecto.DateTime.to_erl 
    |> :calendar.datetime_to_gregorian_seconds 
    |> Kernel.-(62167219200)) * 1000000) + datetime.usec) 
|> div(1000) 

Antwort

1

Die Berechnungen sehen für mich richtig aus. Sie verbessern das etwas mehr Rohre mit:

datetime = Ecto.DateTime.utc(:usec) 

datetime 
|> Ecto.DateTime.to_erl 
|> :calendar.datetime_to_gregorian_seconds 
|> Kernel.-(62167219200) 
|> Kernel.*(1000000) 
|> Kernel.+(datetime.usec) 
|> div(1000) 
|> IO.inspect 

Ausgang:

1472105945416 

Sie auch, dass die konstanten Wert wollen mit :calendar.datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}}) ersetzen, möglicherweise in einem Modul-Attribut zu speichern, so dass es keine Leistungseinbußen ist, wie wie timex does.

Verwandte Themen