SQLite日期和时间数据类型
我正在尝试构建一个漂亮的小型数据库以在移动应用程序上运行(Windows Mobile 5,如果您好奇)。SQLite日期和时间数据类型
在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以来的秒数。
应用程序可以选择存储日期和时间在任何这些 格式和自由使用内置的日期和时间 功能格式之间转换。
所以,救了我的DateTime
值无论是作为REAL
(浮动)或INTEGER
是相同的尺寸。
TEXT
格式?那怎么写?文字上面有23个字符YYYY-MM-DD HH:MM:SS.SSS
。 每个字符是8字节吗?如果是这样,那是一个巨大浪费空间以文本格式存储(这正是我目前正在做的)。
REAL
格式?那怎么办?我是否会定义公元前4714年11月24日的基准日期? (我甚至不知道如果Visual Studio 2008会让我这样做,我从来没有尝试过。)然后得到 基准日期和我想要的日期,提取天数,并存储?
// is this how to declare this date?
private static readonly DateTime nov24_4714bc = new DateTime(-4714, 11, 24);
public static double GetRealDate(DateTime dateTime) {
// FYI: subtracting dates in .NET returns a time span object
return (dateTime - nov24_4714bc).TotalDays;
}
INTEGER
格式?那怎么写?我会定义一个的基准日期的1970-01-01 00:00:00 UTC
(请告诉我该怎么做!),然后得到 基准日期和我的输入日期,提取秒数,并存储?
// 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;
}
对此有何帮助?我有几点困惑。
- 如果“人类可读性”很重要,则使用
TEXT
格式。 - 如果节省空间很重要,请使用其中一种数字格式。
如果您不需要几毫秒的精度,您可以通过只包含您需要的零件来节省TEXT
格式的空间。有3种由SQLite的日期/时间函数接受短格式:
-
YYYY-MM-DD HH:MM:SS
(19个字符) -
YYYY-MM-DD HH:MM
(16个字符) -
YYYY-MM-DD
(10个字符)
(NEVER使用MM/DD/YYYY
;不支持,并且不能正确排序。)
我会定义一个基准日期,即公元前4714年11月24日? (我也不 知道的Visual Studio 2008将让我做,我从来没有尝试过。)
您不能:System.DateTime
只支持年1〜9999,您需要选择一个不同的基准日期,然后执行(dateTime - baseDate).TotalDays + baseDateJD
,其中baseDateJD
是基准日期的Julian日期。一些合理的选择是:
- 0001-01-01 = JD 1721425.5
- 1970-01-01 = JD 2440587.5
- 2000-01-01 = JD 2451544.5
你知道,经过几天的磨练之后,我已经得出结论,我将把日期存储为一个字符串。我想你说过了,我只是想到了,所以你得到了答案。 +1,以考虑格式化日期。我目前正在接受默认设置,我可以看到会导致问题的位置。 – jp2code 2011-12-23 01:04:17
请不要以文本形式存储日期。 – 2011-12-20 01:53:20
仅供参考:公元前4714年11月24日的'REAL'日期格式引发'ArgumentOutOfRangeException':*“指定的参数超出了有效值的范围。”* – jp2code 2011-12-20 03:17:30
并且您是否需要表示4714 BC? – 2011-12-20 03:18:19