当前位置: 首页 > news >正文

sqlite如何存储日期

在这里插入图片描述

文章目录

      • 1. SQLite 没有专门的日期时间类型
      • 2. ISO8601 格式的优势
      • 3. SQLite 的日期函数支持
      • 4. 跨平台兼容性
      • 5. 与其他方案的对比
      • 6. 最佳实践建议
      • 7. 为什么不用 INTEGER 存储时间戳?
      • 结论

在 SQLite 中使用 TEXT 类型存储日期时间是一种常见且推荐的做法,主要有以下原因:

1. SQLite 没有专门的日期时间类型

SQLite 不像其他数据库(如 MySQL, PostgreSQL)有 DATETIMETIMESTAMP 类型。它只支持五种基本类型:

  • NULL
  • INTEGER
  • REAL(浮点数)
  • TEXT
  • BLOB

2. ISO8601 格式的优势

您使用的 toIso8601String() 方法生成的是 ISO8601 格式的字符串,例如:

"2023-08-15T14:30:00.000Z"

这种格式有以下优点:

  • 可排序:字母顺序就是时间顺序(年->月->日->时->分->秒)
  • 可读性强:人类可读且标准统一
  • 时区明确:包含 Z(UTC)或时区偏移(如 +08:00

3. SQLite 的日期函数支持

SQLite 内置的日期函数可以直接处理 ISO8601 格式的字符串:

4. 跨平台兼容性

文本格式在不同编程语言和平台之间转换更方便:

// Dart 转换
DateTime.parse("2023-08-15T14:30:00.000Z");// JavaScript
new Date("2023-08-15T14:30:00.000Z");// Python
from datetime import datetime
datetime.fromisoformat("2023-08-15T14:30:00.000Z")

5. 与其他方案的对比

存储方式优点缺点
TEXT (ISO8601)可读性强,兼容性好存储空间稍大
INTEGER (Unix时间戳)存储空间小,计算高效可读性差,需转换
REAL (Julian Day)适合日期计算可读性最差,不常见

6. 最佳实践建议

// 保存时:DateTime → ISO8601 字符串
final createdAt = DateTime.now().toIso8601String();// 读取时:字符串 → DateTime
DateTime.parse(map['created_at'] as String);// 在 SQL 中使用日期函数
final rooms = await db.rawQuery('''SELECT * FROM rooms WHERE date(created_at) > date('now', '-7 days')
''');

7. 为什么不用 INTEGER 存储时间戳?

虽然时间戳(如 1692095400000)更紧凑,但:

  • 调试时难以阅读
  • 需要处理毫秒/秒的转换
  • 不支持 SQLite 的日期函数
  • 时区处理更复杂

结论

在 SQLite 中使用 TEXT 类型存储 ISO8601 格式的日期时间是最佳实践,它:

  1. 符合 SQLite 的类型系统
  2. 保持数据可读性和可移植性
  3. 兼容 SQLite 的日期/时间函数
  4. 跨平台转换简单

结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

http://www.lryc.cn/news/575899.html

相关文章:

  • 【数据交易】全国数据交易所的发展现状
  • 开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作
  • OpenLayers 拖动旋转和缩放
  • Python打卡训练营-Day44-预训练模型
  • 生成式人工智能实战 | WGAN(Wasserstein Generative Adversarial Network, GAN)
  • Thread Network:物联网时代的低功耗网状网络协议解析
  • 使用 Vcpkg 安装 Qt 时的常见问题与解决方法
  • SQL Server for Linux 如何实现高可用架构
  • Buildroot 2025.05 中文手册【AI高质量翻译】
  • 机器学习基础 多层感知机
  • SpringBoot 防刷 重复提交问题 重复点击问题 注解 RequestParam RequestBody
  • 深度学习框架入门指南:PyTorch 核心实战
  • 临床项目计划框架
  • debian挂载新硬盘后不识别怎么办?
  • 【 MyBatis-Plus | 精讲 】
  • Spring Boot 项目实训 - 图书信息网站
  • 分布式ID生成SnowflakeId雪花算法和百度UidGenerator工具类
  • 微信小程序跳转传参方式
  • 链表最终章——双向链表及其应用
  • Stable Diffusion入门-ControlNet 深入理解-第三课:结构类模型大揭秘——深度、分割与法线贴图
  • 【向上教育】结构化面试开口秘籍.pdf
  • 【江科大】STM32F103C8T6 + TB6612 + N20编码器减速电机《03-增量式PID定速控制》(增量式PID,定时器输入捕获,定时器编码器)
  • 动手学Python:从零开始构建一个“文字冒险游戏”
  • Fiddler中文版抓包工具在跨域与OAuth调试中的深度应用
  • 电子电气架构 --- 车联网技术简介
  • 什么是国际期货?期货交易平台搭建
  • 在反向代理环境下精准获取客户端真实 IP 的最佳实践
  • Java项目:基于SSM框架实现的宠物综合服务平台管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • 论分布式设计
  • 学习设计模式《十五》——模板方法模式