【发布时间】:2015-10-20 08:35:18
【问题描述】:
我正在使用 SQLite 开发桌面独立应用程序。
在我的应用程序中,我曾经将日期时间保存为 DateTime.Now 以标识用户上次访问、上次登录和许多其他用途的时间。它按预期工作。
现在的问题是当我在机器中将系统时间格式从“M/d/yyyy”更改为“d/M/yyyy”时,一切都搞砸了。
在我用来从 Sqlite DB 中检索日期时间并使用 Convert.ToDateTime("[retrived DB value]"); 将其转换为日期时间的所有区域中,我都遇到了异常
似乎Convert.ToDateTime 试图将日期时间从不同的文化转换为当前文化。
我觉得我以错误的方式实现了保存和检索 DateTime 的设计。 .不确定。
独立于系统日期时间文化的标准方法是什么?有什么想法吗?
注意:我在数据库中用于保存 DatimeTime 值的字段是“NTEXT”格式。
【问题讨论】:
-
数据库中的字段是日期时间还是字符串(nvarchar)?
-
我假设您将
DateTime值保存为字符。看起来 SQLite 不支持将DateTime值保留为二进制文件。来自 link 中的 1.2 日期和时间数据类型部分;可以选择使用INTEGER将其保存为 Unix 时间(从 1970-01-01 00:00:00 UTC 开始的秒数)。 -
通常有 3 种记录日期的方法,自预定义日期以来的刻度数(这曾经是标准,但不同的系统使用不同的开始日期,这使得转换非常痛苦),浮点数在分数是一天的分数(现在这是事实上的标准)的日子里,除了人类可读性之外的所有内容都非常糟糕的文本,您应该在保存之前始终转换为 UTC。
-
当您使用 NText 时,您需要解析日期而不是转换它msdn.microsoft.com/en-us/library/kc8s65zs(v=vs.110).aspx