我正在嘗試構建一個漂亮的小型數據庫以在移動應用程序上運行(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