C# 从字符串创建DateTime对象

C# 从字符串创建DateTime对象,c#,datetime,C#,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

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

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";  
}
我的问题是,我从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) 
我不明白为什么,或者如何正确地做到这一点


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

查看datetime.ParseExact()


为什么不简单地用您开始使用的格式进行解析呢

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

不需要进行所有的预处理。

通常不需要在解析之前进行解析。如果你有输入字符串

//                        yyMMddHHmm
string timestampString = "1306050232";
那么你应该能够做到:

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

如果没有,我想了解更多关于您所得到的确切错误的信息。

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

这里的问题可能会帮助您:
//                        yyMMddHHmm
string timestampString = "1306050232";
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime timestamp = DateTime.ParseExact(timeStampString, "yyMMddHHmm", provider);