先把两个报表的时区标记和“一天”的起止点写清楚,再决定是统一到同一时区重新取数,还是只对齐重叠时段。如果一侧报表按UTC自然日、另一侧按北京时间自然日,直接按日期字段合并就会让约八小时的数据错位;此时应优先回到原始时间戳,而不是在汇总层手动加减小时。
拿到两份报表后,不要先看数值,先看三个字段:时间列的名称、时间列的格式、报表说明里是否标注时区。常见情况是文件名带日期,但列值实际是UTC;也可能页面显示本地时间,导出后却变成UTC。此时可以做一个低成本验证:取同一天内一个已知事件的时间点,例如某次扫描任务的开始时间,分别到两份报表里找对应记录。如果两边相差整小时或半小时,说明至少一侧存在时区偏移;如果只差几分钟,则更可能是采集延迟或聚合窗口不同。
这一步的结果决定下一步:确认是时区问题后,才进入统一时区的处理;如果时间点一致但数量对不上,则应转向检查过滤条件、去重规则或字段口径,而不是继续调整时区。
处理时区差异时,优先保留原始时间戳,不直接修改展示用的日期列。假设左侧报表的event_time是UTC,右侧报表的event_time是UTC+8,可以按以下顺序操作:
event_time_utc,左侧直接复制原值,右侧减去8小时。event_time_utc生成统一的日期列report_date_utc,而不是用原始日期列。report_date_utc聚合后,再与另一侧按同一日期列关联。这样做的结果是,两边的“一天”都指向UTC自然日,跨报表比较时不会出现某侧多算或少算一段。若业务要求按北京时间出报表,则把两侧都转为UTC+8后再生成日期列,逻辑相同,只是基准不同。关键不是选哪个时区,而是两侧必须使用同一个基准,并且这个基准要写进报表说明,避免下一次取数时再次混淆。
统一时区后如果总数仍有差异,不要立刻认定是木马检测工具漏报。更稳妥的做法是取一个两侧都覆盖的重叠时段,例如都包含的某六小时,分别按小时统计记录数。若重叠时段内数量接近,差异集中在非重叠时段,说明问题主要来自时区边界;若重叠时段内也持续偏差,则要检查去重键、状态过滤和字段含义。
这里可以借助一个假设例子:左侧报表按UTC统计某天为100条,右侧按UTC+8统计同一天为130条。统一到UTC后,左侧仍为100条,右侧对应UTC日期的记录变为95条,剩余35条落在前一个UTC日。此时应把35条归入正确日期,而不是直接判断哪份报表更准确。这个例子的数字只用于说明对齐方法,不代表任何真实统计结果。
完成一次对齐后,至少留下三项记录:两侧原始时区、统一后的时间基准、生成日期列的表达式。下次再拿到同类报表时,先核对这三项是否一致。若一侧报表突然改变时区标注,或导出工具升级后时间格式变化,应重新执行时间点验证,而不是沿用上一次的换算规则。
如果业务方坚持使用本地自然日,而数据源只提供UTC,则需要在报表层明确标注“本报表按UTC+8重新聚合”,并保留原始时间戳字段供核对。这样即使后续有人质疑某天数据,也能追溯到具体是哪条记录被归入了哪一天,而不是只看到一个无法解释的汇总数字。