Julia 朱莉娅:把Float64转换成Date和DateTime
在Julia中,我有一个类似于Julia 朱莉娅:把Float64转换成Date和DateTime,julia,Julia,在Julia中,我有一个类似于2018.003828474404的浮点数。该浮动应解释为代表日期时间(2018,1,2,9,53,1)。此处,浮动的.003828474404部分表示自2018年初以来的一年时间 如何将Float64转换为DateTime 如何将Float64转换为Date。这将失去精度,并有发生不精确错误的风险(),但就我而言,最近的一天是可以的 尽管这似乎是一个关于一年的固定数量,但2018年之后的0.003828…值代表2018年至2019年之间特定年份的一小部分,因为所有
2018.003828474404
的浮点数。该浮动应解释为代表日期时间(2018,1,2,9,53,1)
。此处,浮动的.003828474404
部分表示自2018年初以来的一年时间
Float64
转换为DateTime
Float64
转换为Date
。这将失去精度,并有发生不精确错误的风险()
,但就我而言,最近的一天是可以的尽管这似乎是一个关于一年的固定数量,但2018年之后的
0.003828…
值代表2018年至2019年之间特定年份的一小部分,因为所有年份的长度略有不同(例如闰年)<代码>日期认真对待这一事实
我们可以定义以下函数partial_year
,以指定精度计算结果(默认为纳秒
,最具体的是日期
)
0.003828…
代表什么?我的第一个猜测是,它表示过去一年的比例,但这没有意义,因为0.003828*365=1.397…
,这意味着DateTime(2018,1,2,9,53)
(大致),而你说的浮动表示DateTime(2018,1,1,12,30,1)
@ColinTBowers您是对的,这是正确的解释。我必须有一个错误的功能(不包括在上面),我用来转换从DateTime到浮动。我现在已经在问题中更正了。你是如何得到这些的?为什么不直接使用unix时间戳呢?我希望能够在财务计算中使用它,在这种情况下,多年浮动似乎更直观。与$e^{r(2018.5-2016)}$类似,2016年至2018年中期,$e^{r$的利率回报率为$r$。我想我可以使用Unix整数,但我必须不断转换利率或时间(以毫秒为单位),以便两者一致。
using Dates
function partial_year(period::Type{<:Period}, float::AbstractFloat)
_year, Δ = divrem(float, 1)
year_start = DateTime(_year)
year = period((year_start + Year(1)) - year_start)
partial = period(round(Dates.value(year) * Δ))
year_start + partial
end
partial_year(float::AbstractFloat) = partial_year(Nanosecond, float)
julia> partial_year(2018.003828474404)
2018-01-02T09:32:14.768
julia> partial_year(Minute, 2018.003828474404)
2018-01-02T09:32:00