2016-04-27 12 views
2

SQL Serverからjson形式でデータをエクスポートしているので、Phoenixアプリケーションにインポートできます。私が確信していないのは、どうやって日付を扱うべきかということです。現時点では、Unixのタイムスタンプとして日付をエクスポートしています。ここではサンプルです:フェニックス/エリクサーでPhoenix、Json、Unixタイムスタンプ

[ 
    { "Log": { "Start": 1319734790, "End": 0, "Comment": "" }, 
    { "Log": { "Start": 1319732847, "End": 1319734790, "Comment": "Had lunch today" } 
] 

DateTimeオブジェクトにUnixタイムスタンプに変換するための最良の方法は何ですか?私はEctoデータベースに挿入しているので、Ecto DateTimeオブジェクトを使用する必要があると仮定しています。

+2

http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html – Dogbert

+1

また、多くの時間をかけて作業する予定がある場合は、「Timex 'ライブラリ、これは物事をより簡単にする。 – JustMichael

+0

最後に、jsonを制御できるため、iso date形式の文字列を使用しました。これらの文字列は、DateTimeフィールドのために自動的に変換され、私は手動変換を行う必要はありませんでした。 – Mitkins

答えて

1

次のようなUnixタイムスタンプからアーランスタイルの日時タプルを取得することができます:あなたはEcto.DateTimeEcto.DateTime.from_erl/1とにそのタプルを変換することができます

epoch = :calendar.datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}}) 
datetime = :calendar.gregorian_seconds_to_datetime(your_unix_timestamp + epoch) 

この{{2016, 4, 28}, {00:50:12}}

のようなタプル形式でdatetimeを持っています

ただし、前提条件を確認してください。タイムゾーン情報が必要なのかもしれません。あなたの例では値0を持っていることがわかります。本当に1970-01-01 00:00:00に「価値がない」と表現したいですか?

+0

実際にはありません。私は0をテストして、それをゼロに変換しようとしていました。インポートが機能するまでタイムゾーン情報を残していましたが、はい、タイムゾーンが重要です。 – Mitkins

1

あなたがたDateTime構造体を持っている場合は、以下の

# Change unit to millisecond, the default is second 
timestamps |> DateTime.from_unix(:millisecond) 

のように、のDateTime構造体へのUNIXタイムスタンプを変換するためにDateTime.from_unix/2を使用することができ、あなただけのエクトモデルフィールドにそれを渡すことができます。 EctoはNaiveDateTimeおよびDateTime構造体に対応する2つのフィールドタイプnaive_datetimeおよびutc_datetimeをサポートしています。あなたはあなたが望むものを選択することができ、Ectoはあなたのために変換を行います。

最後に、2つのフィールドタイプは両方ともデータベースの同じタイプ、つまりPostgreSQLのtimestamp without time zoneに変換されます。モデルスキーマを簡単に切り替えることができます。

+0

私はこれがとても好きです。素敵で短いです – Mitkins

関連する問題