将DateTime作为整数存储和检索到SQL

时间:2012-07-22 17:50:22

标签: c# sql visual-studio-2010 sqlite

过去我和SQLite玩过一点,我非常喜欢它,我想把它用于一个新项目。

第1步是创建数据库,我需要创建一个DateStamp字段,在该字段中我会在事件发生时设置时间戳。

SQLite Documentation中,日期和时间数据类型定义如下:

  

1。2日期和时间数据类型

     

SQLite没有为存储日期留出的存储类   和/或时间。相反,SQLite的内置日期和时间函数   能够将日期和时间存储为TEXT,REAL或INTEGER   值:

     
      
  • TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  •   
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预示   阳历。
  •   
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
  •   
     

应用程序可以选择在任何这些中存储日期和时间   使用内置日期格式和格式之间自由转换   时间函数。

我宁愿不将日期保存为文本,因为Windows DateTime对象不会回到公元前4714年11月24日,我认为我将剩余的DateTime值存储为INTEGER。

那么,如何将DateTime存储为整数?我会在基准日期和我想要的日期之间获得TimeSpan,提取天数并存储吗?

// is this a UTC date?
private static readonly DateTime utc1970_01_01 = new DateTime(1970, 1, 1);

public static double GetIntDate(DateTime dateTime) {
  // FYI: subtracting dates in .NET returns a time span object
  return (dateTime - nov24_4714bc).TotalSeconds;
}

是吗?这是其他人使用SQLite的吗?

它还说SQLite以UTC时间存储日期时间,所以我需要再次转换。

肯定有人以前做过这件事。我很高兴看到有人已经制作了处理这些输入的工具。 SQLite有一些built in functions,但我真的不明白如何使用它们。

解决:

好吧便便。

这可能就这么简单吗?

public static long ToFileTimeUtc(DateTime dateTime) {
  return dateTime.ToFileTimeUtc();
}

public static DateTime FromFileTimeUtc(long fileTimeUtc) {
  return DateTime.FromFileTimeUtc(fileTimeUtc);
}

评论

我可以不这样做吗?

2 个答案:

答案 0 :(得分:1)

好吧便便。

这可能就这么简单吗?

public static long ToFileTimeUtc(DateTime dateTime) {
  return dateTime.ToFileTimeUtc();
}

public static DateTime FromFileTimeUtc(long fileTimeUtc) {
  return DateTime.FromFileTimeUtc(fileTimeUtc);
}

评论

我可以不这样做吗?

答案 1 :(得分:1)

您是否可以使用FileTime取决于您的应用程序是否会访问数据。 FileTime表示自1601年1月1日(UTC)以来100纳秒间隔的数量。

因此,您需要确保整数是SQLLite中的8字节整数,以便存储整个值。

只要您的应用是唯一可以处理此数据的应用,并且您始终使用FileTime,那么就没有问题。如果其他人将访问这些数据,并且他们能够理解FileTime,并且他们知道这就是它,那么也没有问题。