2013-02-07 51 views
0

我在我的DB2數據庫中有一個字符串,它位於美國。我將列值設置爲表示2011年,12月和12月1日的字符串'2011-12-31 00:00:00'。DateTime分析.Net 3.5

我正在我的客戶端程序中正在英國運行並將用戶界面設置爲本地文化(默認值)的字符串中檢索此字符串。我的客戶計劃也在美國和香港運營,其文化背景爲當地文化,分別爲美國和香港。

我正在使用以下代碼將字符串解析爲日期時間。我不確定這是否會起作用,而且我也找不到任何可以指向這個方向的好鏈接。你能否告訴我這是否會在各種文化中起作用,如果不是原因?

string quarterStartDate = "2011-12-01 00:00:00"; 
DateTime quarterStart; 
DateTime.TryParse(quarterStartDate, CultureInfo.InvariantCulture, DateTimeStyles.None, out quarterStart); 
return quarterStart; 

我有一個測試工作按我的要求,但再次「也不太清楚這是否會工作,當UI是要在一個不同的國家運行。

string quarterStarter = "2011-12-01 00:00:00";   
    DateTime quarterStart; 
    DateTime.TryParse(quarterStarter,CultureInfo.InvariantCulture,DateTimeStyles.None,out quarterStart);  
    Assert.IsTrue(quarterStart.Year == 2011); 
    Assert.IsTrue(quarterStart.Month == 12); 
    Assert.IsTrue(quarterStart.Day == 1); 

回答

2

我強烈建議你事先知道的格式,您使用的TryParseTryParseExact代替:

bool success = DateTime.TryParseExact(quarterStarter, "yyyy-MM-dd HH:mm:ss", 
             CultureInfo.InvariantCulture, 
             DateTimeStyles.None, 
             out quarterStart); 

請注意,您應該檢查TryParseExact返回值來檢查它的正確解析 - 如果您的例外情況良好,請改爲使用ParseExact

完全有可能您的現有代碼工作得很好 - 畢竟,您已經提供了不變的文化 - 但指定格式可以讓您更清楚地瞭解您真正期望的內容,也意味着您將檢測到某個值以意想不到的格式提供。

1

您可以使用ParseExact拉日期,例如:

var s = "2011-12-01 00:00:00"; 
var dt = DateTime.ParseExact(s,"yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture); 
1

您可以設置不與文化變革的特定格式。

DateTime dt; 
DateTime.TryParseExact(dateTime, 
         "yyyy-MM-dd hh:mm tt", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out dt); 
+0

您的格式字符串與提供的數據不匹配。 –