0

DB2データベースに、物理的に米国にある文字列があります。この文字列「2011-12-3100:00:00」に設定された列値があります。これは、2011年、12月の月、および12月の1日を示します。

英国で実行されているクライアントプログラムでこれを文字列として取得しており、UIはローカルカルチャ(デフォルト)に設定されています。私のクライアントプログラムは、米国と香港でも実行されており、文化はそれぞれ米国と香港の地域文化に設定されています。

文字列を日時に解析するために次のコードを使用しています。これがうまくいくかどうかはよくわかりませんし、その方向を示す良いリンクを見つけることができませんでした。これがさまざまな文化で機能するかどうかを教えてください。そうでない場合は、その理由を教えてください。

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);
4

3 に答える 3

2

事前にフォーマットを知っているので、次のTryParseExact代わりに使用することを強くお勧めしますTryParse

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

の戻り値をチェックして、正しく解析されていることを確認する必要があることに注意してください。例外が発生しても問題がない場合は、代わりにを使用てください。TryParseExactParseExact

既存のコードが正常に機能する可能性は十分にあります-結局のところ、すでに不変のカルチャを提供しています-しかし、形式を指定すると、実際に期待するものが明確になり、予期しない形式の値かどうかを検出できることも意味します供給される。

于 2013-02-07T18:17:55.440 に答える
1

ParseExact次に、日付を取得するために使用できます。

var s = "2011-12-01 00:00:00";
var dt = DateTime.ParseExact(s,"yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture);
于 2013-02-07T18:18:19.517 に答える
1

文化によって変化しない特定の形式を設定できます。

DateTime dt;
DateTime.TryParseExact(dateTime, 
                       "yyyy-MM-dd hh:mm tt", 
                       CultureInfo.InvariantCulture, 
                       DateTimeStyles.None, 
                       out dt);
于 2013-02-07T18:18:29.770 に答える