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

Python爬虫数据比对在Docker与本地环境运行结果不一致问题排查

问题原因
  • 你的get_time函数生成的是不带时区信息的naive datetime对象,调用timestamp()方法时,Python会默认使用操作系统的本地时区转换为Unix时间戳。
  • 官方python:3镜像默认时区为UTC,和你本地环境时区存在时差:冬令时差1小时(3600秒)、夏令时差2小时(7200秒),和你给出的差异数据完全吻合。
  • 数据库存储的是你本地环境转换的时间戳,Docker环境转换出来的时间戳和数据库值不匹配,导致过滤逻辑完全失效。
修复方案

有两种可选方案,第二种不依赖部署环境更推荐:

方案1:统一Docker容器时区

在Dockerfile中添加以下配置,把容器时区改成和你本地/数据库一致的时区即可(示例为东八区Asia/Shanghai,可替换为你实际使用的时区):

RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

方案2:代码中硬编码固定时区(更推荐)

直接修改get_time函数,给生成的datetime对象明确指定时区,完全脱离系统时区的影响:

from datetime import datetime, timezone, timedelta

# 替换为你实际需要使用的时区偏移,示例为东八区(UTC+8)
FIXED_TZ = timezone(timedelta(hours=8))

def get_time(date, time):
    global year, last
    fmt = '%Y-%m-%dT%H:%M'
    day, month = [x.strip() for x in date.split('.')]
    month = mdr[month]
    if int(month) < last: year = year + 1 
    last = int(month)
    string = f'{year}-{month}-{day}T{time}'
    # 给datetime对象绑定固定时区
    obj = datetime.strptime(string, fmt).replace(tzinfo=FIXED_TZ)
    return int(datetime.timestamp(obj))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:15:11