找了很久都沒有找到合理的解釋,幸好找到一篇文章,解答了這個問題,特收藏於此,以備參考。
http://www.xueit.com/html/2009-02/21_644_00.html
最近使用ASP.NET+SQLite資料庫開發一個網站程式,結果在日期處理上出現了很頭痛的問題,看
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊追蹤資訊,以瞭解有關該錯誤以及代碼中導致錯誤的出處的詳細資料。
異常詳細資料: System.FormatException: 該字串未被識別為有效 DateTime。
解決方案:
在日期儲存到Sqlite資料庫時轉換一個類型,比如:string _now = System.DateTime.Now.ToString("s");
也就是說在.ToString()方法中加一個s,即可解決日期讀取錯誤的問題。
簡單程式碼範例:
string _indate = Request["indate"]; //輸入的日期如:2009-2-21
DateTime _inTime = Convert.ToDateTime(_indate);
//如下是儲存資料SQL語句
insert into 表(indate) values(‘“ + _inTime.ToString("s") + "'); //這裡轉換
之後日期儲存在Sqlite資料庫的內容為:
奇怪為什麼日期成為:1899-12-30了,放心這是正常,看下面我讀取日期出來的內容是什嗎?如下:
看,是正確的日期。
因為iso 8601的描述:(http://msdn.microsoft.com/zh-cn/library/ms187819.aspx)
給出了字串樣本:
* 2004-05-23T14:25:10
* 2004-05-23T14:25:10.487
所以Sqlite儲存的日期要轉為iso 8601標準字串格式
使用 日期.ToString("s");這種方法轉換成 iso 8601標準字串格式了。