从字符串创建DateTime对象

我目前正在从文本文件中读取各种数据,并解析所有内容。 其中一个被解析的项目是事件的开始时间,格式为:

yyMMddHHmm 1306050232 

然后我解析出以下内容:

 string year = "20" + time[0].ToString() + time[1].ToString(); string month = time[2].ToString() + time[3].ToString(); string day = time[4].ToString() + time[5].ToString(); string hour = time[6].ToString() + time[7].ToString(); string minute = time[8].ToString() + time[9].ToString(); string ampm =""; int hourInt = Convert.ToInt32(hour); if (hourInt <= 12) { time = month + "." + day + "." + year + "@" + hour + ":" + minute + " " + "AM"; ampm= "AM"; } else { hourInt = hourInt - 12; time = month + "." + day + "." + year + "@" + hourInt.ToString() + ":" + minute + " " + "PM"; ampm= "PM"; } 

一旦这些被解析出来,我将变量组合起来,并尝试将它放入DateTime中。

 string tempStartTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + " " + ampm; string starttime = DateTime.ParseExact(tempStartTime, "yyyy-MM-dd HH:mm tt",null); 

我的问题是,我从try catch中收到这样的警告:

 System.FormatException: String was not recognized as a valid DateTime. at System.DateTime.ParseExact(String s, String format, IFormatProvider provider) at Project.GUI.parseSchedule(Int32 count) 

我不明白为什么,或者如何正确地做到这一点。

我想要的只是从文件中获取开始时间,将其转换为日期时间对象,然后对其进行操作。

为什么不简单地用你开始的格式进行解析?

 var dt = DateTime.ParseExact(time, "yyMMddHHmm", CultureInfo.InvariantCulture); 

您无需进行所有预处理。

在解析之前解析通常是非常不必要的。 如果你有输入字符串

 // yyMMddHHmm string timestampString = "1306050232"; 

然后你应该能够做到:

 CultureInfo provider = CultureInfo.InvariantCulture; DateTime timestamp = DateTime.ParseExact(timeStampString, "yyMMddHHmm", provider); 

如果没有,我想获得有关您获得的确切错误的更多信息。

看看DateTime.ParseExact() http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

  DateTime result=null; CultureInfo provider = CultureInfo.InvariantCulture; // Parse date and time with custom specifier. string dateString = "Sun 15 Jun 2008 8:30 AM -06:00"; string format = "ddd dd MMM yyyy h:mm tt zzz"; try { result = DateTime.ParseExact(dateString, format, provider); Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } catch (FormatException) { Console.WriteLine("{0} is not in the correct format.", dateString); } 

您可能希望查看自定义格式化程序而不是尝试解析所有内容。 我认为这会使您的代码更易于维护,并且可能更容易解码。 在该页面上链接了一个工具,可以让您在将格式字符串放入代码之前对其进行测试。