C#将日期从字符串转换为日期格式

时间:2014-01-16 16:13:00

标签: c# sql sql-server date datetime

我遇到DateTime.ParseExtract问题。错误是String was not recognized as a valid DateTime

sqlserver 2012中的

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

2 个答案:

答案 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)