Asp.net 格式异常字符串未被识别为有效的日期时间
其中Asp.net 格式异常字符串未被识别为有效的日期时间,asp.net,c#-4.0,datetime-format,Asp.net,C# 4.0,Datetime Format,其中txtTourStartDate.Text=“16/08/2012” 我已经搜索并阅读了所有与此相关的帖子。这就足够了: objTour.tourStartDate = Convert.ToDateTime( DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", null) .ToString("MM/dd/yyyy")); 在a中,/表示区域性特定的日期分隔符,而不是文字字符/。
txtTourStartDate.Text=“16/08/2012”
我已经搜索并阅读了所有与此相关的帖子。这就足够了:
objTour.tourStartDate =
Convert.ToDateTime(
DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", null)
.ToString("MM/dd/yyyy"));
在a中,/
表示区域性特定的日期分隔符,而不是文字字符/
。因此,代码的结果取决于用户(或服务器)的本地化设置
要使代码独立于特定于区域性的设置,您有两个选项:
- 明确指定使用斜杠作为日期分隔符的区域性,例如
objTour.tourStartDate = DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
- 或者转义角色,例如
(注意DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)
和@
)\
这两种方法都会产生期望的结果。您的原始代码可以工作,尽管您正在进行大量不必要的转换。(DateTime->ToString->ToDateTime),真正的问题是
InvariantCulture
。由于您正在为CultureInfo
传递null
,请尝试CultureInfo.InvariantCulture
您的原始代码:
DateTime.ParseExact(txtTourStartDate.Text, @"dd\/MM\/yyyy", null)
更好的办法是:
objTour.tourStartDate =
Convert.ToDateTime(
DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)
.ToString("MM/dd/yyyy"));
天哪,我刚刚意识到那个家伙在做什么(解析->ToString->ToDateTime)。当然,你是对的,+1。无论如何,我将把我的答案保留在这里,因为不逃脱是他做错的另一件事。当我看到这个问题时,我真的很想知道他是怎么做到的。
objTour.tourStartDate =
DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)