2014-03-30 84 views
0

我解析一个Excel创建csv文件,发现该文件的日期已按以下格式指定:MM:ss.0DateTime格式和excel

基于的假设是格式不ISO标准我相信这可以用DateTime.FromOADate阅读,但到目前为止,我没有能够实现这一点没有收到以下错误:“该字符串不是在一个正确的格式”

示例文件条目:59 :03.0

以下是我试过的:

foreach (var rec in record) 
{ 
    double temp = double.Parse(rec.date, System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);   
    MessageBox.Show(DateTime.FromOADate(temp).ToString()); 
} 

任何援助,将不胜感激。

+0

什么是“rec”? –

+0

我使用的是https://github.com/JoshClose/CsvHelper,rec是IEnumerable record = csvread.GetRecords (); – ServerMonkey

回答

1

使用ParseExact,那么你可以指定格式,并从字面上告诉它的格式“MM:ss.0”。

EG: DateTime date = DateTime.ParseExact(rec.date, "mm:ss.0", null);

你可能要检查你从Excel中获得虽然格式,因为这取决于在电子表格中,有时你会得到一个字符串,有时一个DateTime,有时一个号码(可通过到FromOADate方法)。但是,如果它是以上述格式描述的,那么应该可行。

注意:不指定日期时间的任何日期部分,它会得到今天的日期。

http://msdn.microsoft.com/en-us/library/w2sa9yss%28v=vs.110%29.aspx

+0

这工作得很好,我不知道这是ParseExact可以接受的格式。谢谢你的帮助! – ServerMonkey

+1

很好的答案。但是,如果'.0'是十分之一秒,你可以考虑'“mm:ss.f”'而不是。请参阅[自定义日期和时间格式字符串](http://msdn.microsoft.com/en-us/library/8kb3ddd4(v = vs.110).aspx)。 –

0

你可以试着解析这个格式手动

string inputString = "59:03.0"; 
string[] split = inputString.Split(new char[] { ':', '.' }); 

DateTime dateTime = new DateTime(1, 1, 1, 0, int.Parse(split[0]), int.Parse(split[1]));