我在asp.net/c#
上寫了一個相當大的webapp,MSSQL 2008 r2
爲這個數據庫提供服務。該程序需要將date/time
字符串(採用ISO日期格式)轉換爲DateTime
,在此處使用它們並稍後存儲爲smalldatetime
,sql
。轉換爲和從日期時間添加一小時?
當字符串轉換爲datetimes
時,神祕地將hour
添加到結果中。據我所知,在英國,我們受夏令時(目前活躍),但datetime
.convert方法明白這一點?當轉換回字符串時,結果如預期。
我已經寫了一個小程序來說明這個問題(也包括我的理智非ISO日期):
class Program
{
static void Main(string[] args)
{
//BB();
//Dist();
DateTime d1 = new DateTime();
DateTime d2 = new DateTime();
string d1s = "2010-09-13T09:30:01Z";
string d2s = "2010-09-13 09:30:01";
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("d1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
d1s = d1.ToString("u"); d2s = d2.ToString("u");
Console.WriteLine("\nd1: {0}", d1s);
Console.WriteLine("d2: {0}", d2s);
d1 = Convert.ToDateTime(d1s);
d2 = Convert.ToDateTime(d2s);
Console.WriteLine("\nd1s:{0} d1:{1} ", d1s, d1);
Console.WriteLine("d2s:{0} d2:{1} ", d2s, d2);
Console.Read();
}
}
下面是結果我得到當我運行該程序:
d1s:2010-09-13T09:30:01Z d1:13/09/2010 10:30:01
d2s:2010-09-13 09:30:01 d2:13/09/2010 09:30:01
d1: 2010-09-13 10:30:01Z
d2: 2010-09-13 09:30:01Z
d1s:2010-09-13 10:30:01Z d1:13/09/2010 11:30:01
d2s:2010-09-13 09:30:01Z d2:13/09/2010 10:30:01
Done
這是正確的行爲嗎?我是個白癡嗎?我會期望將日期時間轉換爲字符串,然後確切的字符串回到日期時間將返回原始輸入。如果這是正確的行爲,關於如何獲得一致結果但仍使用Convert.ToDateTime()
的任何想法?
很多謝謝。
啊,所以放下「Z」將會解決問題。我不得不做一些字符串replcing,因爲這是我得到它的格式。(編輯 - 是的,似乎解決它。謝謝) – 2010-09-13 11:59:24