0

次のコードを使用して、文字列(英語のdateformatで満たされたテキストボックスから)をDateTimeに解析しようとしています。

DateTime dt;
if (DateTime.TryParseExact(Text, DateTimeFormat, System.Threading.Thread.CurrentThread.CurrentCulture, DateTimeStyles.AssumeLocal, out dt))
{
    logger.Trace("LOCALE: {0} ", System.Threading.Thread.CurrentThread.CurrentCulture);
    logger.Trace("DateTimeFormat: {0} ", DateTimeFormat);
    logger.Trace("CurrentCulture ShortDatePattern: {0} ", System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern);
    logger.Trace("Text: {0} ", Text);
    logger.Trace("result of TryParse: {0} ", dt);
    return dt;
}

ただし、私のロガーの出力は次のとおりです。

LOCALE: en-US 
DateTimeFormat ShortDatePattern: M/d/yyyy 
CurrentCulture ShortDatePattern: M/d/yyyy 
Text: 8/31/2012 
result of TryParse: 31-8-2012 0:00:00 

なぜこれが起こっているのか、私は完全に立ち往生しています。

別のコンソールアプリケーションでこのコードを使用すると、機能します。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
string text = @"8/31/2012";
DateTime date;
string dateTimeFormat = @"M/d/yyyy";
bool parseOk = DateTime.TryParseExact(text, dateTimeFormat, Thread.CurrentThread.CurrentCulture, DateTimeStyles.AssumeLocal, out date);

追加情報:

  • システム:Windows 7 Ultimate EN
  • 非UniCodeのシステム言語:英語
  • web.config system.web:

問題:問題は、日付を「M / d / yyyy」の形式にしたいのですが、代わりに「dd-mm-yyyy」に解析され、無効な日付になります。

4

1 に答える 1

3

ログエントリの出力文字列を指定していないため、デフォルトの文字列(現在のカルチャに基づく)が使用されます。

したがって、代わりに:

logger.Trace("result of TryParse: {0} ", dt);

使用する:

logger.Trace("result of TryParse: {0} ", dt.ToString("M/dd/yyyy"));

または:

logger.Trace("result of TryParse: {0} ", dt.ToShortDateString());
于 2012-08-17T11:35:13.837 に答える