【问题标题】:C# query datetime off sqlite database failsC#查询sqlite数据库的日期时间失败
【发布时间】:2011-12-15 03:36:14
【问题描述】:

我正在读取一个 sqlite 文件,其中日期时间列数据保存为整数值(INTEGER NO NULL)

DateTime dt=reader.GetDateTime(nColDateTime);

但它会发出一个错误,指出返回值的格式不正确。 我在 Datetime 类中尝试了所有其他可用的方法,只找到了

DateTime dt=DateTime.FromBinary(reader.GetInt64(nColDateTime));

有效(因为其他人返回异常)。 但是格式化的日期(如 dt.ToShortDateTime())不正确(即 0042/11/20)我不知道这是什么。 然后我试试这个

long d=DateTime.Now.Ticks-reader.GetInt64(nColDateTime);
DateTime dt=new DateTime(d);

它给了我 1970/05/18

您能帮我获取正确的日期时间吗?

【问题讨论】:

  • 好吧,您大概对 GetInt64 的理解是正确的,但您需要知道整数 的含义 是什么。您是否有一些示例值以及它们要表示的日期/时间?
  • 感谢您的关注,123958450000000000000,只是一个例子。
  • @Jon,因为他表明从DateTime.Now.Ticks 中减去数字会得到一个接近 1970 年的日期,我们可以假设这是使用 Unix 纪元。
  • @Sesama:这个数字不适合 Int64,所以我认为这不是一个有效值。
  • 为你+1,请放轻松,正如我所说的,这只是一个例子。呼呼,我刚刚失去了我的学校基础知识,如果我能回来填补这个,最重要的是,我失去了它,我不会提出这个问题。呼呼,

标签: c# sqlite system.data.sqlite


【解决方案1】:

您的日期以 Unix 纪元格式存储。

您可能只想使用:

private static readonly DateTime epoch = new DateTime(1970, 1, 1);

...

var myDate = epoch + TimeSpan.FromTicks(reader.GetInt64(nColDateTime));

例如,当我查看“1970/05/18”上方的示例时,我可以假设您的日期大约是 5 个月,比今天早 18 天。

这是我将如何检索原始值:

(DateTime.Today - new DateTime(1970, 5, 18)).Ticks

返回:

13119840000000000

将其插入我的公式:

new DateTime(1970, 1, 1) + TimeSpan.FromTicks(13119840000000000)

这会返回:

2011/07/30

【讨论】:

  • 谢谢Smarty John Gietzen,我在哪里可以找到不同系统上的日期时间备注信息?
  • @Sesama:我真的不知道。只需在 Stack Overfow 上提出您可能遇到的问题。
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多