You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言时间范围内数组元素归一化问题排查与修正

银行交易记录时间归一化问题排查与修正

我需要将一批仅知晓发生日期的银行交易记录归一化到时间范围内:例如20条2022年1月1日的交易,要为它们分配具体的时分,使第一条为2022/01/01 00:00,最后一条为2022/01/01 23:59。

我用Go语言编写了如下归一化函数:

func normal(start, end time.Time, arraySize, index float64) time.Time {
    delta := end.Sub(start)
    minutes := delta.Minutes()

    duration := minutes * ((index+1) / arraySize)

    return start.Add(time.Duration(duration) * time.Minute)
}

但运行出现异常:当数组大小为4、时间范围是2022/1/1 00:00到2022/1/1 23:59时,索引0的结果是2022/1/1 05:59,而非预期的00:00,仅索引3的结果符合预期。请问我的归一化逻辑哪里出错了?

编辑补充

感谢@icza提供的修正后的函数:

func timeIndex(min, max time.Time, entries, position float64) time.Time {
    delta := max.Sub(min)
    minutes := delta.Minutes()

    if position < 0 {
        position = 0
    }

    duration := (minutes * (position / (entries - 1)))

    return min.Add(time.Duration(duration) * time.Minute)
}

示例:时间范围为2022/01/01 00:00到2022/01/01 00:03,数组有3条记录,获取第3条(索引2)的归一化时间:

result := timeIndex(time.Date(2022, time.January, 1, 0, 0, 0, 0, time.UTC), time.Date(2022, time.January, 1, 0, 3, 0, 0, time.UTC), 3, 2)

此时结果应为2022/01/01 00:03,与结束时间一致。运行验证:

fmt.Printf("%t", result.Equal(time.Date(2022, time.January, 1, 0, 3, 0, 0, time.UTC)))
// 输出 "true"

内容的提问来源于stack exchange,提问作者shackra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:50:25