SQLite3学习笔记3:UTC和CST 时区偏差问题

1. 校准 Ubuntu 系统时间 / 时区

若系统时间本身和实际时间对不上,执行以下命令校准需同理校准时区 / 同步 NTP 时间):

bash 复制代码
# 1. 设置时区为上海(嵌入式设备常用时区)
sudo timedatectl set-timezone Asia/Shanghai

# 2. 安装时间同步工具(Ubuntu)
sudo apt install ntpdate -y

# 3. 同步网络时间(嵌入式设备可对接NTP服务器,无网络则手动设置)
sudo ntpdate pool.ntp.org

# 验证时间是否正确
date

2. 解决时间戳差 8 小时的问题

SQLite3 的CURRENT_TIMESTAMP默认生成的是UTC 时间(世界协调时间) ,而 Ubuntu 系统显示的是CST 时间(中国标准时间,UTC+8),所以数据库中记录的时间会比本地时间少 8 小时。

  • 数据库时间:2026-01-26 10:15:46(UTC)
  • 本地时间:2026-01-26 18:15:46(CST = UTC+8)
方案 1:查询时转换时区

核心逻辑:原始数据存 UTC(国际标准,便于跨时区设备溯源),查询时转换为 CST(UTC+8)。

sql 复制代码
// 原查询语句
SELECT * FROM device_params;

// 新查询语句(转换为CST时间)
SELECT id, param_name, param_value, datetime(update_ts, '+8 hours') AS update_ts_cst FROM device_params;

结果如下:

sql 复制代码
// UTC
1|temp|26.0|2026-01-26 10:15:46
2|humidity|60.2|2026-01-26 10:15:46

// CST
1|temp|26.0|2026-01-26 18:15:46
2|humidity|60.2|2026-01-26 18:15:46
方案 2:插入 / 更新时直接存 CST 时间

核心逻辑 :插入 / 更新时显式指定时区偏移,让update_ts直接存储 CST 时间 ------ 适合仅在国内使用、无需跨时区的嵌入式设备。

操作步骤(修改 INSERT/UPDATE 语句)
  1. 插入数据时直接存 CST
sql 复制代码
// 原插入语句(存UTC)
INSERT INTO device_params (param_name, param_value) VALUES ('temp', 26.5), ('humidity', 61.0);
   
// 新插入语句(存CST,显式+8小时)
INSERT INTO device_params (param_name, param_value, update_ts) VALUES ('temp', 26.5, datetime(CURRENT_TIMESTAMP, '+8 hours')), ('humidity', 61.0, datetime(CURRENT_TIMESTAMP, '+8 hours'));

结果如下:

sql 复制代码
// UTC
3|temp|26.5|2026-01-26 11:03:55
4|humidity|61.0|2026-01-26 11:03:55

// CST
5|temp|26.5|2026-01-26 19:04:16
6|humidity|61.0|2026-01-26 19:04:16
  1. 更新数据时同步存 CST
sql 复制代码
// 原更新语句(存UTC)
UPDATE device_params SET param_value = 27.0, update_ts = CURRENT_TIMESTAMP WHERE param_name = 'temp';
   
// 新更新语句(存CST)
UPDATE device_params SET param_value = 27.0, update_ts = datetime(CURRENT_TIMESTAMP, '+8 hours') WHERE param_name = 'temp';

结果如下:

sql 复制代码
// UTC
1|temp|27.0|2026-01-26 11:14:13
3|temp|27.0|2026-01-26 11:14:13
5|temp|27.0|2026-01-26 11:14:13

// CST
1|temp|27.0|2026-01-26 19:14:18
3|temp|27.0|2026-01-26 19:14:18
5|temp|27.0|2026-01-26 19:14:18
相关推荐
心中有国也有家43 分钟前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
玄米乌龙茶1231 小时前
LLM成长笔记(三):API 开发基础
笔记
Upsy-Daisy1 小时前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
LuminousCPP2 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
_李小白3 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟3 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
2301_818730564 小时前
numpy的学习(笔记)
学习·numpy
你干嘛?哎哟4 小时前
4月工作笔记
笔记
tom02184 小时前
软考中级《嵌入式系统设计师》全套备考资料(真题 + 教材 + 笔记)
笔记·嵌入式·软考·自学·电子技术·电子资料·变成