julia - Julia:将 Float64 转换为日期和日期时间
问题描述
在 Julia 我有一个像2018.003828474404
. 这个 Float 应该被解释为代表DateTime(2018,1,2,9,53,1)
. 这里的.003828474404
浮动部分代表自 2018 年初以来过去一年的比例。
- 如何从 转换
Float64
为DateTime
. - 如何从 转换
Float64
为Date
. 这将失去精度和风险,InexactError()
但就我的目的而言,最近的一天就可以了。
解决方案
尽管相对于一年而言它似乎是一个固定数量,但0.003828...
之后的值2018
代表了2018 年至 2019 年之间特定年份的一小部分,因为所有年份的长度都略有不同(例如闰年)。Dates
认真对待这个事实。
我们可以定义以下函数partial_year
来计算具有指定精度的结果(默认为Nanosecond
,由 提供的最具体的Dates
)。
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)
首先,我们从一年的剩余部分中分离出起始年份。我们使用Dates
时间段处理来计算指定年份的确切长度,并将其转换period
为我们所需精度的类型。我们将此year
值乘以年份的分数,将结果四舍五入(因为Period
不允许使用小数),然后将其转换回 a period
。最后,我们将partial
今年添加到year_start
.
正如预期的那样,我们可以在您的示例中使用它,具有各种精度:
julia> partial_year(2018.003828474404)
2018-01-02T09:32:14.768
julia> partial_year(Minute, 2018.003828474404)
2018-01-02T09:32:00
推荐阅读
- python - 将年份字符串(例如“2021”)转换为熊猫分析中的分类
- python - 我在哪里可以找到 matplotlib 中的颜色代码?
- graphql - Javascript 中的 GraphQL 查询
- java - 如何使用配置服务器中的属性覆盖 Spring Boot 默认配置
- python - 如何存在数据框构造函数错误?
- node.js - 发生未处理的异常:找不到模块“@angular-devkit/build-angular/package.json”需要堆栈
- sql-server - 如何遍历重复行并连接值列
- sapui5 - 在格式化程序中设置 ProcessFlowLaneHeader 的状态
- java - 如何使用 Apache Camel 3.x 重写 Urls?
- python - 最小化许多变量的函数