C# 输入d-MMM-yy格式的字符串时出现问题。精确到日期,但保留日期格式和日期类型以进行排序
正如标题所说,我从数据表中引入了一个日期字符串,格式为“d-MMM-yy”或2006年8月27日 我需要将其转换为日期类型进行排序,但我需要保持相同的显示格式 注意:我使用的是C#,.NET2.0,我正在重新输入这段代码,所以请注意打字错误C# 输入d-MMM-yy格式的字符串时出现问题。精确到日期,但保留日期格式和日期类型以进行排序,c#,string,parsing,date,format,C#,String,Parsing,Date,Format,正如标题所说,我从数据表中引入了一个日期字符串,格式为“d-MMM-yy”或2006年8月27日 我需要将其转换为日期类型进行排序,但我需要保持相同的显示格式 注意:我使用的是C#,.NET2.0,我正在重新输入这段代码,所以请注意打字错误 System.Globalization.DateTimeFormatInfo dtfi; dtfi = new System.Globalization.DateTimeFormatInfo(); dtfi.ShortDatePattern = "d-MM
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);
由于您已经将colXDate作为DateTime,因此不需要将其转换为字符串,然后再转换回DateTime。 相反,请尝试以下方法:
newRow["colX"] = colXDate.ToString("d-MMM-yy");
您的行失败,因为
ToString()
将以当前区域性中定义的格式输出日期,并且您正试图使用自定义日期格式将其转换回日期
您需要将其设置为
colXDate.ToString(“d-MMM-yy”)
场景:我正在将数据表作为DataGrids数据源传回。我正在传入一个字符串字段,该字段是日期。我想把它转换成一个日期,这样我就可以按它排序,但我还想保持它在输入的字符串上的格式
问题:从我的一些研究来看,DateTime类型似乎正是您放入的任何数据表中的数据类型,并且不可格式化。因此,即使我引入了一个非常规的字符串date,并通过datetime.ParseExact将其转换为datetime,但当我将其放入datetime字段并尝试对其进行格式化时(newRow[“colX”]=colXDate.ToString(“d-MMM-yy”);//正如Scott所说的那样),它仍然是带有小时数的设置日期时间格式……等等
解决方案:所以我通过烟雾和镜子解决了这个问题。我在datatable中放了两列,第一列是字符串格式的DisplayDate,第二列是datetime类型。在ItemDataBound上,我隐藏了datetime列(e.Item.Cells[5].Visible=false;),然后在sort事件上测试string date列(e.SortExpression==“colX”),如果为真,我将按隐藏的datetime列进行排序。请不要在标题前面加上“C#”之类的前缀。这就是标记的用途。这里有很多不必要的
字符串,然后进行解析。谢谢,就数据而言,一切都正常,但格式仍然不正确。我认为这是因为newRow[“colX”]列被定义为datetime类型,所以当我执行newRow[“colX”]=colXDate.ToString(“d-MMM-yy”);它显示为2006年8月27日12:00:00 AM。当我添加我的列{dtbl.Columns.add(“colX”,typeof(DateTime));}或之后,有没有办法在保持DateTime数据类型的同时以所需的格式“d-MMM-yy”获取它?从我的一些研究中,似乎DateTime类型就是数据表中的类型,并且不可复制。我将此数据表作为DataGrids数据源传回。所以我想我可以通过烟雾和镜子来做到这一点。如果我在datatable中放入两列,第一列是字符串格式的DisplayDate,第二列是datetime类型。在ItemDataBind上,我隐藏datetime列,然后在sort上,我测试stringdate列,如果为true,我将按隐藏的datetime列进行排序。