2012-07-22 83 views
3

过去我已经玩过一些SQLite,我很喜欢它,因此我想将它用于新项目。将日期时间存储到SQL并将其作为整数

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

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

1.2日期和时间数据类型

SQLite没有存储类,用于存储日期 搁置和/或次数。取而代之的是,内置的SQLite 的日期和时间函数能够存储日期和时间为TEXT,REAL或INTEGER 值:

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

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

我宁愿不保存日期为文本,而因为Windows DateTime对象不回去11月24日,4714公元前,我认为我留下了存储DateTime值为整数。

那么,如何将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); 
} 

评论?

我可以不这样做吗?

+1

如果您觉得您的问题已被您的答案回答,请取消删除您的答案并从问题标题中删除[已解决]。 – naveen 2012-07-22 18:50:11

+0

现在我疯了! Mystere Man说我需要删除它(我得到了一个downvote),现在你说我应该加回来。尝试在SO上进行政治上的纠正是困难和混乱的。 – jp2code 2012-07-22 18:53:51

回答

1

好吧poo。

它可以这么简单吗?

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

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

评论?

我可以不这样做吗?

+2

不要将其他信息作为问题添加。编辑您的原始问题。 – 2012-07-22 18:03:45

+0

但是,如果我从来没有得到“如何做到这一点?”的答案,我该如何标记为解决方案?你的答案虽然很好,但并没有解决如何将Windows'DateTime'值存储到'Integer'或如何恢复它。 – jp2code 2012-07-22 18:16:44

+0

你没有提供答案,你添加更多的问题,它属于问题本身,而不是答案。我的回答是回答你的问题,它提供了如何去做。我只是告诉你,是的,你可以在正确的背景下做到这一点。 – 2012-07-22 18:24:23

0

无论你是否可以使用文件时间取决于是否任何东西,但你的应用程序将永远不会访问数据。 FileTime表示从1601年1月1日(UTC)开始的100纳秒间隔的数量。

因此,您将需要确保整数是为了存储整个价值SQLLite的8字节整数。

只要你的应用程序是处理这种数据的唯一的应用程序,而你总是使用FILETIME,那么就没有问题。如果其他人能够访问这些数据,并且他们能够理解FileTime,并且他们知道这就是它,那么也没有问题。

+0

什么格式,你建议我用它来存储'DateTime'值?其次,你推荐从你的* unspoken *格式中获得'DateTime'值的方法是什么? – jp2code 2012-07-22 19:00:17

+0

@ jp2code - 我建议你重读我的信息..我告诉过你用什么格式存储它,特别是一个8字节的整数。我说你可以使用你在答案中提出的方法,这不是一个答案。 – 2012-07-22 19:19:41

相关问题