我想计算四舍五入到最接近的秒或分钟的一对 DateTime 之间的差异。
initial = now()
println(typeof(initial))
sleep(12)
final = now()
difference = final - initial
println(typeof(difference))
Run Code Online (Sandbox Code Playgroud)
给
DateTime
Base.Dates.Millisecond
Run Code Online (Sandbox Code Playgroud)
后一种类型很难使用,因为几乎所有便利类型都用于DateTimes。转换difference为秒或小数分钟的推荐方法是什么?这可能不降到整数吗?我宁愿避免这种情况,因为它更容易出错。
由于difference表示日期之间的持续时间而不是特定时间,因此它只是以毫秒为单位的持续时间是有意义的。此外,DateTime和Base.Dates.Millisecond对象在内部用 表示Int64,所以一切都已经是一个整数。
julia> moment = now()
2016-12-22T22:54:57.393
julia> dump(moment)
DateTime
instant: Base.Dates.UTInstant{Base.Dates.Millisecond}
periods: Base.Dates.Millisecond
value: Int64 63618130497393
julia> dump(now()-moment)
Base.Dates.Millisecond
value: Int64 29820
Run Code Online (Sandbox Code Playgroud)
将毫秒值除以 1000 得到秒,或除以 60,000 得到分钟。使用round()以四舍五入为最接近秒或分钟。
julia> d = (now() - moment).value/60_000
3.9330833333333333
julia> e = round(d)
4.0
Run Code Online (Sandbox Code Playgroud)
然后乘以 1000 或 60,000 并将其反馈回Dates.Millisecond以将圆形图形重新转换为适当的对象:
julia> Dates.Millisecond(60_000e)
240000 milliseconds
Run Code Online (Sandbox Code Playgroud)
将 aDate或DateTime对象舍入到给定的时间间隔要简单得多,因为您可以round()根据文档使用它,它将分派到相关的方法:
Run Code Online (Sandbox Code Playgroud)julia> floor(Date(1985, 8, 16), Dates.Month) 1985-08-01 julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15)) 2013-02-13T00:45:00 julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day) 2016-08-07T00:00:00
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |