我遇到DateTime.ParseExtract问题。错误是String was not recognized as a valid DateTime
。
trialDate定义为folllow type = date,并以此格式显示 MM / DD / YYYY。我想这是sqlserver的默认设置。我不知道如何以及在何处将其更改为 dd / MM / yyyy或dd-MM-yyyy。
当我在listview中显示日期时,我做了这个(戴上面具): “
这是C#代码隐藏
string sTrialDate = "";
foreach (ListViewDataItem item in ListView1.Items)
{
CheckBox MyCheckBox = (CheckBox)item.FindControl("MyCheckBox");
if (MyCheckBox.Checked)
{
Label myTrialDate = (Label)item.FindControl("trialDatelbl");
sTrialDate = myTrialDate.Text;
}
}
问题是DATETIME.ParseExtract,这是我到目前为止所尝试的:
DateTime dt = DateTime.ParseExact("sTrialDate", "MM/dd/yyyy",
System.Globalization.CultureInfo.InvariantCulture); <=== not working
DateTime dt = DateTime.ParseExact("sTrialDate", "dd/MM/yyyy",
System.Globalization.CultureInfo.InvariantCulture); <=== not working
DateTime dt = DateTime.ParseExact("sTrialDate", "dd/MM/yyyy ",
System.Globalization.CultureInfo.InvariantCulture); <=== not working
DateTime dt = DateTime.ParseExact(Request.QueryString["sTrialDate"], "dd/MM/yyyy", null);
<==not working
答案 0 :(得分:6)
你似乎在滥用ParseExact
。你在做:
ParseExact("sDateRdv", "MM/dd/yyyy")
尝试将字符串sDateRdv
解析为日期并且明显失败。如果sDateRdv
是包含您日期的变量,那么您应该使用:
ParseExact(sDateRdv, "MM/dd/yyyy")
在上一个示例中,您应该检查Request.QueryString["sTrialDate"]
的值是多少。它是一个有效的日期字符串吗?
最后,您将讨论sqlserver中的日期以及如何更改其表示形式。答案是你不是真的。日期是日期,与其显示方式无关。当你看它时,它将被转换为一个人类可读的字符串(因为这是我们所读到的),但这并不代表它的存储方式。您可以将它视为一个完整的日期(因此从数据库中将其作为DateTime
的C#代码),您只需将其转换为字符串进行显示或者某些类型的序列化(例如XML)
答案 1 :(得分:0)
除了你不应该用引号传递变量之外:
DateTime dt = DateTime.ParseExact(sDateRdv, "MM/dd/yyyy",
System.Globalization.CultureInfo.InvariantCulture);
DateTime dt = DateTime.ParseExact(sDateRdv, "dd/MM/yyyy",
System.Globalization.CultureInfo.InvariantCulture);
DateTime dt = DateTime.ParseExact(sDateRdv, "dd/MM/yyyy ",
System.Globalization.CultureInfo.InvariantCulture);
你也可以试试这个:
DateTimeFormatInfo dtfi = new DateTimeFormatInfo();
dtfi.ShortDatePattern = "dd-MM-yyyy";
DateTime objDate = Convert.ToDateTime(someStringWithDate, dtfi)