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

哪里txtTourStartDate.Text="16/08/2012"

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

4

3 回答 3

4

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

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

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

    DateTime.ParseExact(txtTourStartDate.Text, "dd/MM/yyyy", 
                        CultureInfo.InvariantCulture)
    
  • 或转义字符,例如

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

    (注意@ \)。

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

于 2012-08-31T05:43:09.827 回答
2

这就足够了:

objTour.tourStartDate = DateTime.ParseExact(txtTourStartDate.Text, 
                                            "dd/MM/yyyy", 
                                            CultureInfo.InvariantCulture);
于 2012-08-31T05:41:23.660 回答
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)
于 2012-08-31T05:53:05.607 回答