當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir DateTime.from_naive用法及代碼示例


Elixir語言中 DateTime.from_naive 相關用法介紹如下。

用法:

from_naive(naive_datetime, time_zone, time_zone_database \\ Calendar.get_time_zone_database())
(從 1.4.0 開始)
@spec from_naive(
  Calendar.naive_datetime(),
  Calendar.time_zone(),
  Calendar.time_zone_database()
) ::
  {:ok, t()}
  | {:ambiguous, first_datetime :: t(), second_datetime :: t()}
  | {:gap, t(), t()}
  | {:error,
     :incompatible_calendars
     | :time_zone_not_found
     | :utc_only_time_zone_database}

將給定的 NaiveDateTime 轉換為 DateTime

它需要一個時區來放入 NaiveDateTime 。如果時區是"Etc/UTC",它總是成功的。否則,將根據 time_zone_database 給出的時區數據庫檢查 NaiveDateTime。請參閱模塊文檔中的“時區數據庫”部分。

例子

iex> DateTime.from_naive(~N[2016-05-24 13:26:08.003], "Etc/UTC")
{:ok, ~U[2016-05-24 13:26:08.003Z]}

當日期時間不明確時 - 例如在從夏季時間更改為冬季時間期間 - 兩個可能的有效日期時間在一個元組中返回。第一個日期時間也是按時間順序排在第一位的日期時間,而第二個日期時間排在最後。

iex> {:ambiguous, first_dt, second_dt} = DateTime.from_naive(~N[2018-10-28 02:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
iex> first_dt
#DateTime<2018-10-28 02:30:00+02:00 CEST Europe/Copenhagen>
iex> second_dt
#DateTime<2018-10-28 02:30:00+01:00 CET Europe/Copenhagen>

當掛壁時間存在間隙時 - 例如在春天時鍾向前轉動時 - 間隙之前的最新有效日期時間和間隙之後的第一個有效日期時間。

iex> {:gap, just_before, just_after} = DateTime.from_naive(~N[2019-03-31 02:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
iex> just_before
#DateTime<2019-03-31 01:59:59.999999+01:00 CET Europe/Copenhagen>
iex> just_after
#DateTime<2019-03-31 03:00:00+02:00 CEST Europe/Copenhagen>

大多數時候,在某個時區的某個日期和時間,隻有一個有效的日期時間。

iex> {:ok, datetime} = DateTime.from_naive(~N[2018-07-28 12:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
iex> datetime
#DateTime<2018-07-28 12:30:00+02:00 CEST Europe/Copenhagen>

此函數接受至少包含與 NaiveDateTime 結構相同的字段的任何映射或結構。最常見的例子是 DateTime 。在這種情況下,有關該 DateTime 的時區的信息將被完全忽略。這與將 DateTime 傳遞給 Date.to_iso8601/2 的原理相同。 Date.to_iso8601/2 僅提取給定結構的 date-specific 字段(日曆、年、月和日)並忽略所有其他字段。

這樣,如果您在一個時區有一個 DateTime ,您可以在另一個時區獲得相同的掛鍾時間。例如,如果您在哥本哈根有 2018-08-24 10:00:00 並且想要 UTC 的 2018-08-24 10:00:00 的 DateTime ,您可以執行以下操作:

iex> cph_datetime = DateTime.from_naive!(~N[2018-08-24 10:00:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
iex> {:ok, utc_datetime} = DateTime.from_naive(cph_datetime, "Etc/UTC", FakeTimeZoneDatabase)
iex> utc_datetime
~U[2018-08-24 10:00:00Z]

相反,如果您想要在不同時區的同一時間點使用 DateTime ,請參閱 DateTime.shift_zone/3 函數,該函數會將哥本哈根的 2018-08-24 10:00:00 轉換為 2018-08-24 08:00:00在UTC。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 DateTime.from_naive(naive_datetime, time_zone, time_zone_database \\ Calendar.get_time_zone_database())。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。