2012-07-22 88 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

相關問題