Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入d-MMM-yy格式的字符串时出现问题。精确到日期,但保留日期格式和日期类型以进行排序_C#_String_Parsing_Date_Format - Fatal编程技术网

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

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

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

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

注意:我使用的是C#,.NET2.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);

由于您已经将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列进行排序。