2014-03-30 39 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]));