2014-01-16 84 views
-1

我遇到了DateTime.ParseExtract问题。错误是String was not recognized as a valid DateTimeC#将日期从字符串转换为日期格式

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 
+7

'“sDateRdv”'看起来并不像一个日期我。 –

+0

我改变了对不起,它应该sTrialDate – user3127986

+1

'“sTrialDate”'也不像日期! –

回答

6

你好像是在误用ParseExact。你正在做的:

ParseExact("sDateRdv", "MM/dd/yyyy") 

正试图解析字符串sDateRdv为日期,显然失败。如果sDateRdv是包含你的约会一个变量,那么你应该使用:

ParseExact(sDateRdv, "MM/dd/yyyy") 

在您的最后一个例子,你应该检查什么的Request.QueryString["sTrialDate"]值。这是一个有效的日期字符串吗?

最后,您将讨论sqlserver中的日期以及如何更改其表示形式。答案是你不是真的。日期是一个日期,并且与它的显示方式无关。当你看它时,它会被转换成一个可读的字符串(因为这就是我们所读的),但并不代表它是如何存储的。你可以把它看作一个整体的日期(所以从数据库到你的C#代码中将它作为DateTime),你只能将它转换为一个字符串来显示或者可能是某种序列化(例如XML)。

+0

相同的错误字符串未被识别为具有DateTime的有效DateTime dt2 = DateTime.ParseExact(sTrialDate,“dd/MM/yyyy”,System.Globalization.CultureInfo.InvariantCulture); OR DateTime dt2 = DateTime.ParseExact(sTrialDate,“MM/dd/yyyy”,System.Globalization.CultureInfo.InvariantCulture);如果字符串格式为“dd-MM-YYYY”,那么字符串格式为dd-MM-YYYY – user3127986

+0

那么为什么不只是将日期格式更改为?如果您提供的格式和字符串的格式不同,那么当然会有错误。我不确定你在这里问什么...... – Chris

+0

由于我的数据库格式是DATE类型,我们有任何选项可以将DATETIME更改为DATE吗?在C#中似乎没有DATE格式。我想如果我想与没有时间的SQL的DATE格式进行比较,我将不得不放弃TIME。 – user3127986

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) 
相关问题