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

如何对结构体中int64类型的时间戳字段进行区间数据过滤?

实现方案

核心逻辑是先把目标时间区间转换为和Create_time精度匹配的int64时间戳,再遍历数据集做范围筛选即可,示例代码如下:

package main

import (
	"time"
)

// 你的原结构体定义
type Log struct {
	ID          int   `mapstructure:"id"`
	Create_time int64 `mapstructure:"create_time,omitempty"`
}

// FilterLogs 筛选符合时间范围的日志
func FilterLogs(logList []Log) []Log {
	// 1. 配置时区:如果你的时间戳是UTC标准时间,替换为 time.UTC 即可
	timeZone, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		// 时区加载失败可根据自己的业务逻辑做异常处理,示例此处直接返回空
		return nil
	}

	// 2. 构造起止时间并转换为对应精度的时间戳
	startTime, _ := time.ParseInLocation("2006-01-02 15:04:05", "2021-10-24 00:00:00", timeZone)
	endTime, _ := time.ParseInLocation("2006-01-02 15:04:05", "2021-10-25 00:00:00", timeZone)

	// 注意:如果你的Create_time是毫秒级时间戳,此处替换为 .UnixMilli();微秒级替换为 .UnixMicro()
	startTs := startTime.Unix()
	endTs := endTime.Unix()

	// 3. 遍历筛选
	var res []Log
	for _, item := range logList {
		if item.Create_time >= startTs && item.Create_time < endTs {
			res = append(res, item)
		}
	}
	return res
}

注意事项

  • 时区必须和Create_time存储时使用的时区保持一致,否则会出现8小时的偏移误差
  • 边界条件使用>=开始时间、<结束时间,可以完整覆盖10月24日全天的所有数据,避免丢失临界时间的毫秒/微秒级数据
  • 如果你的数据集量级特别大,可以考虑提前对Create_time做排序,用二分查找进一步提升筛选效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:01