Calendar %日历。含糊不清的日期{可能的日期{时间日历长生不老药

Calendar %日历。含糊不清的日期{可能的日期{时间日历长生不老药,calendar,elixir,Calendar,Elixir,在过去的4个月里,我一直在使用日历进行日期-时间转换,一切都很顺利,但突然之间,我在这方面开始了一些奇怪的行为, 我所做的是 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 |> En

在过去的4个月里,我一直在使用
日历进行日期-时间转换,一切都很顺利,但突然之间,我在这方面开始了一些奇怪的行为,
我所做的是

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}]}}
我完全不知道这个原因,因为它工作得很好,但突然它给了我这些错误。有什么帮助吗

更新:我正在使用日历。

根据,当您提供的输入时间不明确时,会发生这种情况:

AmbiguousDateTime提供了一个表示不明确时间的结构 和特定时区中的日期。这些结构将从 当提供的时间不明确时,使用DateTime.from_erl/2函数

含糊不清的DateTime包含两个DateTime结构。例如,它们可以 表示DST时间和非DST时间。如果时钟向后拨 从夏天到冬天的时间是2:00,然后是“墙” “时间”在1:00和2:00之间发生两次。其中一次在DST和 其中一个不是。

这似乎就是你的情况。时间输出是欧洲/都柏林时间的凌晨1点,而凌晨1点在2016年10月30日发生了两次:第二次是在凌晨2点,夏令时结束时你将时钟拨回

您似乎可以使用该函数来消除所获得结果的歧义。

根据,当您提供的输入时间不明确时,会发生这种情况:

AmbiguousDateTime提供了一个表示不明确时间的结构 和特定时区中的日期。这些结构将从 当提供的时间不明确时,使用DateTime.from_erl/2函数

含糊不清的DateTime包含两个DateTime结构。例如,它们可以 表示DST时间和非DST时间。如果时钟向后拨 从夏天到冬天的时间是2:00,然后是“墙” “时间”在1:00和2:00之间发生两次。其中一次在DST和 其中一个不是。

这似乎就是你的情况。时间输出是欧洲/都柏林时间的凌晨1点,而凌晨1点在2016年10月30日发生了两次:第二次是在凌晨2点,夏令时结束时你将时钟拨回


看起来你可以使用这个函数来消除你得到的结果的歧义。

我假设你正在使用,也许值得在问题中指出它。谢谢你这么做。@nietaki Btw刚刚看到你来自大型机,我的X同事Milos Mosic也在大型机中。我假设你正在使用,可能值得指出我我想问一下。谢谢你这么做。@nietaki Btw刚刚看到你是从大型机来的,我的一个X同事也是在大型机,Milos Mosic。。但是为什么它在过去5个月运行良好时开始发生?我应该选择哪个区域?IST还是GMT?如果是这样的话,我可以从列表中选择一个值,这会产生任何影响吗不同?我不知道你的代码运行的日期范围,我猜它以前从来没有遇到过这种边缘情况-每年只发生一个小时。好吧,好吧,问题是只有在开始日期在10月之前,我才知道,但是选择一个值怎么样?唯一的区别是d GMT和
std_off:3600
在disamb中,我应该选择哪个区域?由你决定哪一个结果最适合你的用例:带有
std_off:3600
的将是那天凌晨1点的“第一次发生”。在夏天,带有
std_off:0
的将是“第二次发生”,不再有夏季时间偏移。但为什么它在过去5个月正常工作时开始发生?我应该选择哪个区域?IST或GMT?如果是这样,那么我可以从列表中选择一个值,这会有任何区别吗?我不知道代码运行的日期范围,我猜它永远不会发生o以前遇到过这种边缘情况-它每年只发生一个小时。好吧,好吧,只有当开始日期在10月之前时,问题才会出现,我完全明白,但是选择一个值怎么样?唯一的区别是IST和GMT和
std_off:3600
在disamb中,我应该选择哪个区域?这是你的决定,结果是什么ts最适合您的用例:带有
std_off:3600的ts将是当天凌晨1点的“第一次出现”,仍然是夏季时间,带有
std_off:0
的ts将是“第二次出现”,不再有夏季时间偏移。