Julia:不同时间段之间的转换

Rya*_*n M 2 julia

完全披露:我只使用 Julia 大约一天,所以现在提出问题可能为时过早。

我不太了解 Dates 模块的 Period 类型的效用。假设我有两次,我想找到它们之间的分钟数。看起来很自然的事情是减去时间,然后将结果转换为分钟。我可以处理没有 Minute 构造函数的情况(这对我的 Python 困扰的大脑来说似乎是最自然的),但似乎convert应该能够做一些事情。

从毫秒转换为整数到分钟的“解决方案”似乎有点恶心。这样做的更好/正确/惯用方法是什么?(我做了 RTFM,但也许答案就在那里,我错过了。)

y, m, d = (2015, 03, 16)
hr1, min1, sec1 = (8, 14, 00)
hr2, min2, sec2 = (9, 23, 00)
t1 = DateTime(y, m, d, hr1, min1, sec1)
t2 = DateTime(y, m, d, hr2, min2, sec2)
# println(t2 - t1)  # 4140000 milliseconds
# Minute(t2 - t1)  # ERROR: ArgumentError("Can't convert Millisecond to Minute")
# minute(t2 - t1)  # ERROR: `minute` has no method matching
                   # minute(::Millisecond)
# convert(Minute, (t2-t1))  # ERROR: `convert` has no method matching
                            # convert(::Type{Minute}, ::Millisecond)

delta_t_ms = convert(Int, t2 - t1)

function ms_to_min(time_ms)
    MS_PER_S = 1000
    S_PER_MIN = 60
    # recall that division is floating point unless you use div function
    return div(time_ms, (MS_PER_S * S_PER_MIN))
end

delta_t_min = ms_to_min(delta_t_ms)
println(Minute(delta_t_min))  # 69 minutes
Run Code Online (Sandbox Code Playgroud)

(我很抱歉选择了一个引起窃笑的时间间隔。我碰巧将两个朋友的生日转换为小时和分钟,而没有真正考虑它。)

小智 6

好问题; 看来我们应该添加它!(披露:我制作了Dates模块)。

实际上,我们曾经在那里进行过转换,但是由于某种原因,它们被删除了(我认为这围绕着不精确的转换是否应该引发错误,最近在 Base 中进行了大量清理整数/浮点数)。我想肯定是有道理的,将它们添加回去。实际上,我们有少数在那里进行其他操作,所以很明显他们是有用的。

与往常一样,这也是一个谁有时间编码/测试/提交的问题,希望这是由真正需要该功能的人所驱动如果您有雄心壮志,请随时提交 PR!