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


Elixir DateTime.new!用法及代碼示例


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

用法:

new!(date, time, time_zone \\ "Etc/UTC", time_zone_database \\ Calendar.get_time_zone_database())
(從 1.11.0 開始)
@spec new!(Date.t(), Time.t(), Calendar.time_zone(), Calendar.time_zone_database()) ::
  t()

從日期和時間結構構建日期時間,引發錯誤。

它期望時區將 DateTime 放入。如果未通過時區,它將默認為 "Etc/UTC" ,始終成功。否則,將根據作為 time_zone_database 給出的時區數據庫檢查 DateTime。請參閱模塊文檔中的“時區數據庫”部分。

例子

iex> DateTime.new!(~D[2016-05-24], ~T[13:26:08.003], "Etc/UTC")
~U[2016-05-24 13:26:08.003Z]

當日期時間不明確時 - 例如在從夏季時間更改為冬季時間期間 - 將引發錯誤。

iex> DateTime.new!(~D[2018-10-28], ~T[02:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
** (ArgumentError) cannot build datetime with ~D[2018-10-28] and ~T[02:30:00] because such instant is ambiguous in time zone Europe/Copenhagen as there is an overlap between #DateTime<2018-10-28 02:30:00+02:00 CEST Europe/Copenhagen> and #DateTime<2018-10-28 02:30:00+01:00 CET Europe/Copenhagen>

當掛鍾時間有間隙時——例如在春天時鍾向前轉動時——就會出現錯誤。

iex> DateTime.new!(~D[2019-03-31], ~T[02:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
** (ArgumentError) cannot build datetime with ~D[2019-03-31] and ~T[02:30:00] because such instant does not exist in time zone Europe/Copenhagen as there is a gap between #DateTime<2019-03-31 01:59:59.999999+01:00 CET Europe/Copenhagen> and #DateTime<2019-03-31 03:00:00+02:00 CEST Europe/Copenhagen>

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

iex> datetime = DateTime.new!(~D[2018-07-28], ~T[12:30:00], "Europe/Copenhagen", FakeTimeZoneDatabase)
iex> datetime
#DateTime<2018-07-28 12:30:00+02:00 CEST Europe/Copenhagen>

相關用法


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