2017-01-18 116 views
1

我一直在做使用Calendar一切日期時間的轉換是爲過去4個月工作正常,但所有的突然我開始在這一些奇怪的行爲, 什麼我做的是%Calendar.AmbiguousDateTime {possible_date_times日曆藥劑

1..total_days |> Enum.reduce(start_date, fn _i, acc -> 
    day_of_week = acc |> Calendar.Date.day_of_week_name 
    rec_head = get_head_tail(schedule[day_of_week]) 
    rec_head |> Enum.each(fn(x) -> 
    iterate(x, acc, timezone) |> t_download(interval, t_agent) 
    end) 
    acc |> Calendar.DateTime.to_erl |> IO.inspect |> Calendar.DateTime.from_erl!(timezone, {123456, 6}) |> IO.inspect |> Calendar.DateTime.add!(86400) 
end) 

而且

acc |> Calendar.DateTime.to_erl |> IO.inspect |> Calendar.DateTime.from_erl!(timezone, {123456, 6}) |> IO.inspect |> Calendar.DateTime.add!(86400) 

給輸出

{{2016, 10, 27}, {1, 0, 0}} 
%Calendar.DateTime{abbr: "IST", day: 27, hour: 1, min: 0, month: 10, sec: 0, 
std_off: 3600, timezone: "Europe/Dublin", usec: {123456, 6}, utc_off: 0, 
year: 2016} 
{{2016, 10, 28}, {1, 0, 0}} 
%Calendar.DateTime{abbr: "IST", day: 28, hour: 1, min: 0, month: 10, sec: 0, 
std_off: 3600, timezone: "Europe/Dublin", usec: {123456, 6}, utc_off: 0, 
year: 2016} 
{{2016, 10, 29}, {1, 0, 0}} 
%Calendar.DateTime{abbr: "IST", day: 29, hour: 1, min: 0, month: 10, sec: 0, 
std_off: 3600, timezone: "Europe/Dublin", usec: {123456, 6}, utc_off: 0, 
year: 2016} 
{{2016, 10, 30}, {1, 0, 0}} 

但在最後的日期和時間,而不是給我的,因爲它是上面給出正確的輸出,這是給這個

{:ambiguous, %Calendar.AmbiguousDateTime{possible_date_times: [%Calendar.DateTime{abbr: "GMT", day: 30, hour: 1, min: 0, month: 10, sec: 0, std_off: 0, timezone: "Europe/Dublin", usec: {123456, 6}, utc_off: 0, year: 2016}, %Calendar.DateTime{abbr: "IST", day: 30, hour: 1, min: 0, month: 10, sec: 0, std_off: 3600, timezone: "Europe/Dublin", usec: {123456, 6}, utc_off: 0, year: 2016}]}} 

我完全不知道的這個原因,因爲這是工作正常,但所有的突發其給我這些錯誤。任何幫助?

更新:正在使用https://github.com/lau/calendar日曆。

+0

我假設你正在使用[lau/calendar](https://github.com/lau/calendar),可能值得在問題中指出。 – nietaki

+1

謝謝你這樣做.. – ijunaidfarooq

+0

@nietaki Btw剛剛看到你是來自MainFrame,我的X同事同事也在Mainframe,Milos Mosic .. – ijunaidfarooq

回答

0

根據the docs,發生這種情況時,提供所輸入的時間是不明確的:

AmbiguousDateTime提供表示一個模糊時間 和日期在特定時區中的結構體。當提供的時間不明確時,這些結構將從DateTime.from_erl/2函數中返回 。

AmbiguousDateTime包含兩個DateTime結構。例如,他們可以 表示DST和非DST時間。 如果從夏天到冬天的時間從2:00開始,時鐘將返回 小時,則1:00到2:00之間的「牆壁 」時間會發生兩次。其中之一是在DST和 其中之一不是。

這似乎是你的情況。時間輸出爲上午1點Europe/Dublin時間,上午1點在2016年10月30日發生兩次:第二次是凌晨2點,當夏令時結束時,您將時鐘調回。

看起來你可以使用disamb/2函數來消除你得到的結果。

+0

但是爲什麼它開始時發生在過去5個月工作正常 – ijunaidfarooq

+0

而哪個zone_abbr我應該選擇? IST還是GMT?如果是這種情況,那麼我可以從列表中選擇一個值,這會有什麼區別? – ijunaidfarooq

+0

我不知道你的代碼運行在哪個日期範圍內,我的猜測是,它從來沒有碰到過這種邊緣情況 - 每年只發生一個小時。 – nietaki