elixir - 如何在 Elixir 中使用流获取日期时间列表
问题描述
如何使用具有特定间隔的流获取两个日期时间之间的 DateTime 列表。
我做了这个
stream = Stream.iterate(starting, &(Calendar.DateTime.add!(&1, 1200)))
1200 是我每次要添加到日期的间隔。
当我这样做时它工作正常。
iex(16)> {:ok, after_seconds, 0, :after} = Calendar.DateTime.diff(ending, starting)
{:ok, 691200, 0, :after}
iex(17)> chunk = after_seconds / 1200 |> trunc
576
576 是从开始日期时间到结束日期时间我需要的块值
在做
Enum.take(stream, chunk)
假设这是开始和结束日期时间
iex(14)> starting = Calendar.DateTime.from_erl!({{2020, 1, 25},{0, 29, 10}}, "Etc/UTC", {123456, 6}) |> Calendar.DateTime.shift_zone!("Europe/Dublin")
#DateTime<2020-01-25 00:29:10.123456+00:00 GMT Europe/Dublin>
iex(15)> ending = Calendar.DateTime.from_erl!({{2020, 2, 2},{0, 29, 10}}, "Etc/UTC", {123456, 6}) |> Calendar.DateTime.shift_zone!("Europe/Dublin")
#DateTime<2020-02-02 00:29:10.123456+00:00 GMT Europe/Dublin>
但是很慢。我怎样才能让它更快?还有什么比这更好的解决方案?
out of this 应该是这样的
[#DateTime<2020-01-25 00:00:00.123456+00:00 GMT Europe/Dublin>,
#DateTime<2020-01-25 00:20:00.123456+00:00 GMT Europe/Dublin>,
#DateTime<2020-01-25 00:40:00.123456+00:00 GMT Europe/Dublin>,
#DateTime<2020-01-25 01:00:00.123456+00:00 GMT Europe/Dublin>,
....
#DateTime<2020-01-25 23:40:00.123456+00:00 GMT Europe/Dublin>
]
解决方案
你真的需要一个DateTime
吗?还是Date
工作就好了?根据您提出问题的方式,我会尝试从 a 开始,通过 usingDate
迭代,然后取您需要的任何数量。Stream
Date.add
推荐阅读
- python - 使用 BERT 和 Keras 的神经网络进行文本分类
- c# - 是否可以使用 ASP.NET MVC 在其他模型的详细信息视图中链接模型的创建视图?
- javascript - 谷歌自动完成放置搜索错误不是 HTMLInputElement 的实例
- python - 在python中无法从索引中找到数据
- c - 使用 qsort 函数对结构进行排序
- arangodb - ArangoDB 通配符搜索很慢
- node.js - 如果加载 Typeorm 后满足条件,则返回空对象
- sql - 唯一的约束/引用postgres中另一个表的列
- reactjs - React Apollo 查询依赖于其他查询
- python - 如何在 Python 中找到最适合二维直方图的线?