我正在尝试使用以下代码将字符串(从填充有英语日期格式的文本框)解析为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);
额外信息:
问题: 问题是我希望日期格式为“M / d / yyyy”,而是将其解析为“dd-mm-yyyy”,这会导致日期无效
答案 0 :(得分: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());