我正在尝试构建一个漂亮的小型数据库以在移动应用程序上运行(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;
}
对此有何帮助?我有几点困惑。
请不要以文本形式存储日期。 – 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