TryParseExact() 方法不解析从 jQuery 的日期选择器中选择的日期

TryParseExact() method not parsing dates selected from jQuery's datepicker

我正在按以下方式使用 jQuery 的 datepicker 小部件(在我的 主页 ) :

<script>
   $(".datepicker").datepicker({
                    showAnim: 'fadeIn',
                    minDate: 0,
                    maxDate: "3M",
                    dateFormat: "dd-mm-yy"                    
                });
 </script>

我的内容页面中有一个asp:Repeater控件。在我的内容页面的C#代码中,我正在使用 DateTime.TryParseExact 方法从转发器控件获取日期并按以下方式解析它:

for (int i = 0; i < rptr.Items.Count; i++)
 {
....
...//find other controls
...
      TextBox txtDate = (TextBox)rptr.Items[i].FindControl("txtServiceDate");

   DateTime eventDate = new DateTime();

            if (txtDate.Text != null)
            {
                if (DateTime.TryParseExact(txtDate.Text, "dd-mm-yy", null, System.Globalization.DateTimeStyles.None, out eventDate))
                {
                    cartObj.ServiceDate = eventDate; //code doesn't go here
                }
                else
                {
                    cartObj.ServiceDate = DateTime.Now; //code reaches here!which means parsing failed
                }
            }
            else
            {
                cartObj.ServiceDate = DateTime.Now;
            }
...
....

...//other code
}

正如您在 datepicker() 中看到的那样,我已将日期格式指定为 dd-mm-yy', but this date doesn't get formatted in myTrParseExact()` 方法,即使指定的格式相同。

可能有什么问题?

编辑: 我添加了在调试模式下进入 TryParseExact 方法的屏幕截图:

您正在尝试按如下方式设置日期格式:

dd-mm-yy

[day]-[minute]-[year]

在 .NET 中,月份表示为 MM

您可以在此处找到日期的所有字符串表示形式的完整参考 https://msdn.microsoft.com/en-us/library/8kb3ddd4%28v=vs.110%29.aspx

在C#中,mm表示分钟。尝试使用 MM,如:

if (DateTime.TryParseExact(txtDate.Text, "dd-MM-yy", etc etc etc

所有功劳归于 @Jon Skeet。在 TryParseExact() 方法中,我将 null 作为值传递给 IFormatProvider。传递里面的文化信息,就这么神奇了。

我将 IFormatProvider 的值更改为 CultureInfo.InvariantCulture,它位于 System.Globalization 命名空间中。

CultureInfo.InvariantCulture 属性 用于您不确定提前时间、您的日期和小数/货币值将采用哪种文化格式。

以下是我现在使用的方法:

 if (DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture , System.Globalization.DateTimeStyles.None, out eventDate))
   {
      //date parsed successfully . Do something with it !
   }