[英]DateTime.TryParse Parses to wrong format
我正在嘗試使用以下代碼將字符串(從充滿英語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);
額外信息:
問題:問題是我希望日期格式為“ M / d / yyyy”,但是將其解析為“ dd-mm-yyyy”,這導致無效的日期
您尚未為日志條目指定輸出字符串,因此它將使用默認字符串(基於當前區域性)。
因此,代替:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.