DateTime和string之間的相互轉換經常碰到,可就這么簡單的一個轉換其中也有些需要注意的地方.
1 static void Main(string[] args) 2 { 3 string format = @"yyyy/MM/dd HH:mm:ss"; 4 DateTimeFormatInfo dtfi = DateTimeFormatInfo.InvariantInfo; 5 6 DateTime dateTime = new DateTime(2014, 11, 2, 17, 30, 00); 7 8 string dateTimeStr1 = dateTime.ToString(format); 9 string dateTimeStr2 = dateTime.ToString(format, dtfi); 10 11 Console.WriteLine(Thread.CurrentThread.CurrentCulture.DisplayName); 12 Console.WriteLine(dateTimeStr1); 13 Console.WriteLine(dateTimeStr2); 14 15 DateTime dateTimeResult; 16 Console.WriteLine(DateTime.TryParseExact(dateTimeStr1, format, null, DateTimeStyles.None, out dateTimeResult)); 17 Console.WriteLine(DateTime.TryParseExact(dateTimeStr2, format, dtfi, DateTimeStyles.None, out dateTimeResult)); 18 19 Console.ReadLine(); 20 }
dateTime.ToString(format)如果不傳第二個參數,那么將會使用當前線程的區域設置,使格式化的結果依賴於本機的區域設置.
DateTime.TryParseExact(dateTimeStr1, format, null, DateTimeStyles.None, out dateTimeResult),第三個參數如果為null,也會使用當前線程的區域設置.
由於不能保證所有機器的區域設置都一樣,上面兩句代碼可能會得不到預期的結果.
可以使用特定的區域設置來解決這個問題,或者直接將轉換設置為和區域設置無關,完全由代碼控制.
DateTimeFormatInfo dtfi = DateTimeFormatInfo.InvariantInfo;
string dateTimeStr2 = dateTime.ToString(format, dtfi);
DateTime.TryParseExact(dateTimeStr2, format, dtfi, DateTimeStyles.None, out dateTimeResult);
