如何将带时区的日期时间插入 SQLite?

Posted

技术标签:

【中文标题】如何将带时区的日期时间插入 SQLite?【英文标题】:How to insert datetime with timezone to SQLite? 【发布时间】:2012-10-30 06:58:37 【问题描述】:

我知道要插入日期时间,应该使用这种格式 yyyy-mm-dd hh:mm:ss

但是,我的数据集有一个类似于 yyyy-mm-dd hh:mm:ss +/-0X:00时间戳字段,其中 X 可以采用许多值,并且与我计算机的本地时区不同。

将具有此类时区信息的日期时间字段插入 SQLite 的最佳方法是什么?

【问题讨论】:

我总是会插入转换为格林威治 (UTS+0) 的时间,客户端在从数据库中检索时会将其转换为本地时间。这样您就不需要在数据库中存储时区。如果您确实需要存储测量时间的客户端的时区,请将其放入另一列。 简单的方法是将时间存储为 varcahar/string,然后在查询时隐藏时间 @EmmanuelN - 这是一个糟糕的主意 - 它会使处理日期/时间变得更加困难;始终以可能的最佳类型存储值。 farfareast 有更好的主意;不过,我可能会说 UTC,它没有夏令时(不确定格林威治)。 【参考方案1】:

SQLite's built-in date and time functions 了解这些字符串中的时区规范,但是对于不同的时区,对这些字符串的任何其他操作(甚至是搜索和比较)都将无法正常工作。

如果你想处理时区,你必须要么

将所有时间戳转换为一个特定的时区(UTC),以便您可以使用它们进行排序和搜索;或 将时区信息保留在其中,但不要在 SQL 中而是在您的应用程序中执行所有搜索、排序和其他计算。

【讨论】:

我相信不再是这样了。 感谢您的信息,CL。我很好奇“对这些字符串的任何其他操作”。我有一个错误,其中值存储在datetime 列中,末尾有一个时区(形式为“+/- 0X:00”),其中与表中混合的一些其他值进行排序,没有时区信息(所以, UTC),并且 SQLite 没有正确排序。您是否有指向有关这些不受支持的操作的信息的链接? @DerekMorrison 这些值是字符串,除了内置日期/时间函数之外的所有操作都是字符串操作。

以上是关于如何将带时区的日期时间插入 SQLite?的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期时间值插入 SQLite 数据库?

如何在 SQLite 表中插入日期和查询日期

如何在 Xamarin Forms 中将日期、日期时间和时间保存到 SQLite 数据库?

如何在 Android 应用程序中插入日期时间设置为“现在”的 SQLite 记录?

如何使用正确的时区显示日期

使用 pyodbc 将带日期的数据上传到 MS Access 数据库