2015-04-01 63 views
0

我使用jQuery的datepicker部件以下列方式(在我母版页):TryParseExact()方法不解析来自jQuery的日期选择器选择日期

<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 my TrParseExact()`方法。

什么可能是错的?

编辑: 我已经添加了什么进入TryParseExact方法在调试模式下的截图:

enter image description here

+0

'mm'意味着.NET自定义格式字符串的分钟数,而不是几个月......(我还*强烈*建议使用yyyy而不是yy ...并且理想情况下是yyyy-MM-dd而不是其他方式圆......这就是ISO-8601格式。) – 2015-04-01 04:50:37

+0

@JonSkeet:我使用的是'yyyy-MM-dd'格式。但是这也没有得到解析,我想我不能在'datepicker()'中使用相同的格式,因为它不会生成所需的日期格式。 – 2015-04-01 04:57:12

+0

那么通过给出一个无法解析的值的示例并将其硬编码成一个简短但完整的程序来演示问题,从而剪掉了jQuery部分。 – 2015-04-01 04:57:53

回答

0

一切归功于@乔恩飞碟双向。在TryParseExact()方法中,我将null作为值传递给IFormatProvider。传递其中的文化信息,做了魔术。

我将IFormatProvider的值更改为位于System.Globalization名称空间中的CultureInfo.InvariantCulture

当你不知道时间提前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 ! 
    } 
0

在C#中一个完整的参考,意味着毫米分钟。尝试使用MM,如:

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

不起作用! :/ – 2015-04-01 05:05:38

相关问题