2011-04-13 114 views
8

嘗試搜索無處不在,不去。如何將SqlDateTime值轉換爲.Net :: DateTime

到目前爲止的方法是DateTime dt = (DateTime)sqlparam.Value;。我可以想象,在不同的配置,不同的SQL區域設置,不同的PC區域設置等方面可能會出錯。但是,再次,解析SQL datetime字符串的值是更瘋狂的想法。

是否有工作的解決方案,這是.NET,應該有一個,對吧?

+0

是的,二進制表示是一個DATETIME,我不認爲它與Net :: DateTime二進制兼容,調試器顯示一些奇怪的時間字符串,我不確定內部轉換是否正確完成,而不是通過一些DateTime :: TryParse((sqlparam as object).ToString()); – Coder 2011-04-13 14:05:00

回答

4

我不明白明確鑄造它有什麼問題,那就是我該怎麼做。

如果您的問題是由「不同的配置,不同的SQL區域設置,不同的PC區域設置」引起的,那麼使用不同的轉換方法將無濟於事。

然而,你可能想看看這個新的數據類型在SQL Server 2008: DateTimeOffset

+0

它似乎工作,我希望它是好的,雖然我不確定,因爲.NET是遠離金屬的方式,不知道它在底下做了什麼。 – Coder 2011-04-14 09:45:23

4
using System; 

class Program 
{ 
    static void Main() 
    { 
    // Taken from MySQL: SELECT CURTIME() 
    //     SELECT TIME(...) 
    string mySqlTime = "23:50:26"; 
    DateTime time = DateTime.Parse(mySqlTime); 

    // Taken from MySQL: SELECT TIMESTAMP(...) 
    string mySqlTimestamp = "2003-12-31 00:00:00"; 
    time = DateTime.Parse(mySqlTimestamp); 
    Console.WriteLine(time); 

    // Taken from MySQL: SELECT CURDATE() 
    //     SELECT DATE(...) 
    string mySqlDate = "2008-06-13"; 
    time = DateTime.Parse(mySqlDate); 
    Console.WriteLine(time); 
    } 
} 
+0

日期2008-20-10 == 2008-10-20 == 10-20-2008 == 20-10-2008 ==等這似乎是問題,特別是如果我必須部署應用程序具有不同區域選項的電腦。 – Coder 2011-04-13 13:31:54

2

它只是轉換爲日期時間。 如果它可以爲空,則將其轉換爲Nullable,也可以寫爲「DateTime?」。

DateTime? value = (DateTime?)resultSet["myDateColumn"]; 

看看SqlDateTime Class

它有一個解析方法,您可以施放後,解析你串入SQLDATETIME到的DateTime

13

SqlDateTime班有一個屬性Value它已經是DateTime類型。爲什麼需要進行任何轉換?直接使用Value即可。

+0

但參數是'SqlParameter(「@param」,System.Data.SqlDbType.DateTime);''不'SqlDateTime' – Coder 2011-04-13 13:42:05