从字符串创建DateTime对象
本文关键字:对象 DateTime 创建 字符串 | 更新日期: 2023-09-27 18:17:01
我目前正在从文本文件中读取各种数据,并解析出所有内容。要解析的其中一项是事件的开始时间,格式为:
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)
我不明白为什么,或者如何正确地做到这一点。
我想要的只是从文件中获取开始时间,将其转换为datetime对象,然后对其进行操作。
为什么不直接使用开始的格式进行解析呢?
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);
}
您可能希望查看自定义格式化程序,而不是尝试解析所有内容。我认为这将使您的代码更易于维护,并且可能更容易解码。这个页面上有一个工具,可以让你在将格式字符串放入代码之前测试它