引入d-MMM-yy格式的字符串时出现问题.精确到日期,但保留日期格式和日期类型进行排序

本文关键字:日期 格式 保留 类型 排序 字符串 d-MMM-yy 问题 引入 | 更新日期: 2023-09-27 18:25:41

正如标题所说,我将从数据表中引入一个日期字符串,格式为"d-MMM-yy"或2006年8月27日。

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

注意:我使用的是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);

引入d-MMM-yy格式的字符串时出现问题.精确到日期,但保留日期格式和日期类型进行排序

由于您已经将colXDate作为DateTime,因此不需要将其转换为字符串,然后再转换回DateTime。相反,试试这个:

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

您的行失败,因为ToString()将以当前区域性中定义的格式输出日期,而您正试图使用自定义日期格式将其转换回日期。

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

场景:我正在将一个数据表作为DataGrids数据源传递回。我正在传递一个字符串字段,它是一个日期。我想把它转换成一个日期,这样我就可以按它排序,但我也想保持它在输入的字符串上的相同格式。

问题:根据我的一些研究,DateTime类型似乎正是你放入的任何数据表中的数据类型,并且是不可格式化的。因此,即使我引入了一个非正常的字符串日期,并通过datetime.ParseExact将其转换为日期时间,当我将其放入日期时间字段并尝试格式化时(newRow["colX"]=colXDate.ToString("d-MMM-yy")//正如斯科特在上面所说),它仍然是一个带有小时的固定日期时间格式。。。等

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