格式异常字符串未被识别为有效的DateTime

时间:2012-08-31 05:35:34

标签: asp.net c#-4.0 datetime-format

objTour.tourStartDate = 
    Convert.ToDateTime(
        DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", null)
            .ToString("MM/dd/yyyy"));

其中txtTourStartDate.Text="16/08/2012"

我搜索并阅读了与此相关的所有帖子。

3 个答案:

答案 0 :(得分:4)

custom date format string中,/表示特定于文化的日期分隔符,而不是文字字符/。因此,代码的结果取决于用户(或服务器)的本地化设置。

要使代码独立于特定于文化的设置,您有两种选择:

  • 明确指定使用斜杠作为日期分隔符的区域性,例如

    DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", 
                        CultureInfo.InvariantCulture)
    
  • 或逃避角色,例如

    DateTime.ParseExact(txtTourStartDate.Text, @"dd\/MM\/yyyy", null)
    

    (请注意@ \)。

两者都应该产生预期的结果。

答案 1 :(得分:2)

这就足够了:

objTour.tourStartDate = DateTime.ParseExact(txtTourStartDate.Text, 
                                            "dd/MM/yyyy", 
                                            CultureInfo.InvariantCulture);

答案 2 :(得分:2)

您的原始代码有效,但您正在进行大量不必要的转换。 (DateTime - > ToString - > ToDateTime)真实问题InvariantCulture。由于您要null CultureInfo尝试CultureInfo.InvariantCulture

您的原始代码:

objTour.tourStartDate = 
    Convert.ToDateTime(
        DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)
            .ToString("MM/dd/yyyy"));

更好的可能是:

objTour.tourStartDate =
DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture)