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 my
TrParseExact()` 方法,即使指定的格式相同。
可能有什么问题?
编辑:
我添加了在调试模式下进入 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 !
}
我正在按以下方式使用 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 my
TrParseExact()` 方法,即使指定的格式相同。
可能有什么问题?
编辑: 我添加了在调试模式下进入 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 !
}