无法引入带有d-MMM-yy格式的字符串parse.exact到日期但保留日期格式和日期类型以进行排序

时间:2012-02-23 01:31:26

标签: c# string parsing date format

正如标题所说,我从格式为“d-MMM-yy”或27-AUG-06的数据表中引入日期字符串。

我需要将其转换为日期类型进行排序,但我需要保持相同的显示格式。

注意:我正在使用C#,。Net 2.0,我正在重新输入此代码,所以请耐心等待错别字

System.Globalization.DateTimeFormatInfo dtfi;
dtfi = new System.Globalization.DateTimeFormatInfo();
dtfi.ShortDatePattern = "d-MMM-yy";
dtfi.DateSeperator = "-";

//this is in a for loop with rowCnt being the row index/counter: loop and datatable is working fine. 
//"newRow" represents a DataRow in the new table.
// the table [row] [column] is bringing in the string date like "27-AUG-06"
//colXDate IS RECORDED AS {8/27/2006 12:00:00 AM}
DateTime colXDate = DateTime.ParseExact(inputDataTable.Rows[rowCnt]["colX"].ToString(), "d-MMM-yy", System.Globalization.CultureInfo.InvariantCulture);

//@@@@ THIS NEXT LINE IS WHERE IT GIVES ME AN ERROR "String was not recognized as valid datetime."
newRow["colX"] = Convert.ToDateTime(colXDate.ToString(), dtfi);

3 个答案:

答案 0 :(得分:0)

由于您已将colXDate作为DateTime,因此无需将其转换为字符串,然后再将其转换为日期时间。 相反,试试这个:

newRow["colX"] = colXDate.ToString("d-MMM-yy");

答案 1 :(得分:0)

您的广告联盟失败了,因为ToString()将以当前文化中定义的格式输出日期,并且您尝试使用自定义日期格式将其转换回日期。

您需要将其设置为colXDate.ToString("d-MMM-yy")

答案 2 :(得分:0)

SCENARIO:我将数据表作为DataGrids数据源传回。我传递的是一个日期字符串字段。我想将它转换为日期,以便我可以按它排序,但我也希望保持与进入的字符串相同的格式。

问题:从我的一些研究中可以看出,DateTime类型恰好是您放入其中的任何数据表中的数据类型,并且不是可合成的。因此,即使我引入一个非正规字符串日期并通过DateTime.ParseExact将其转换为日期时间,当我将其放入我的datetime字段并尝试格式化时(newRow [“colX”] = colXDate.ToString(“d- MMM-yy“); //正如斯科特上面所说的那样,它仍然是以小时......等设定的日期时间格式。

解决方案:所以我通过烟雾和镜子解决了这个问题。我在数据表中放了2列,第一列是字符串格式显示日期,第二列是日期时间类型。在ItemDataBound上我隐藏了datetime列(e.Item.Cells [5] .Visible = false;)然后在sort事件上我测试了字符串日期列(e.SortExpression ==“colX”),如果是真的我按隐藏的日期时间列排序。