2016-12-04 6 views
1

タプル{DD、MM、YY}の中から(Ecto。)DateTimeを作成する方法や、Elixirの文字列から解析する方法はありますか?私はErlangからDateTimeを使用すべきでしょうか?私はグーグルだが何も見つけられておらず、その問題に関するドキュメントには何もない。たとえばDateTimeについてのみ - 現在の日付と時刻を取得する方法など。エリクサーのDateTimeを解析するには?

私はTimexのようなサードパーティライブラリを使用したくないことに注意してください。あなたはEcto.Date{DD, MM, YY}タプルを変換するよう

Ecto.Date.utc 
Ecto.Time.utc 
Ecto.DateTime.utc 
DateTime.utc_now 

のいずれかを使用することができます

答えて

4

現在の日付とまたは時刻を取得するには、あなたはエクト提供する機能でそれを行うことはできません。ただし、{YYYY, MM, DD}タプルを使用してEcto.Dateに変換することができます。

Ecto.Date.from_erl({2016, 12, 4}) 
#Ecto.Date<2016-12-04> 

Date.from_erl({2016, 12, 4}) 
{:ok, ~D[2016-12-04]} 

Ecto.Time.from_erl({13, 55, 10}) 
#Ecto.Time<12:10:08> 

Ecto.Time.from_erl({13, 55, 10}) 
{:ok, ~T[13:55:10]} 

Ecto.DateTime.from_erl({{2016, 12, 4}, {13, 55, 10}}) 
#Ecto.DateTime<2016-12-04 13:55:10> 

Ecto.Date.from_erl({2016, 12, 4}) |> Ecto.DateTime.from_date() 
#Ecto.Date<2016-12-04> 

これらの機能が期待する正しい順序でデータが存在することを確認するだけで済みます。

これらを文字列から解析するには、別のライブラリを持ってくるか、パーサを自分で書き込む必要があります。

4

Justinによって与えられた答えに追加してください。 Elixirの標準ライブラリは、ISO 8601の日付を解析できます。

iex> Date.from_iso8601("2015-01-23") 
{:ok, ~D[2015-01-23]} 

やエラーを起こすというバングバージョン、と:

iex> Date.from_iso8601!("2015-01-23") 
~D[2015-01-23] 

あなたがISO 8601文字列から完全な日時をしたい場合は、あなたがするので、NaiveDateTimeに満足する必要があります信頼できるタイムゾーン情報はありません。

iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07") 
{:ok, ~N[2015-01-23 23:50:07]} 

注意してください。タイムゾーンオフセットを捨ててしまいます。

将来的にDateTimeにfrom_iso8601/1が存在しますが、最近追加され、Elixir v1.3.4からリリースされていません。タイムゾーンオフセットは保持されますが、タイムゾーンはUTCに設定されます。

+1

この関数 'from_iso8601/1'は[Elixir v1.5.1](https://hexdocs.pm/elixir/DateTime.html#from_iso8601/2)に実装されています。 –

関連する問題