2014-05-15 76 views
1

我真的不明白爲什麼這不想工作。我收到一個例外:將字符串轉換爲日期時間格式 - 格式錯誤

字符串未被識別爲有效的DateTime。

我讀從一個文件中的字符串日期,看起來像這樣2/27/2014 10:10:55

這個方法接收的文件名和推斷,我需要的數據(緯度,經度,年月日)

public void ReadCsvFile(string filename) 
{ 
    var reader = new StreamReader(File.OpenRead(filename)); 
    gpsDataList = new List<GpsFileClass>(); 
    while(!reader.EndOfStream){ 
     var line = reader.ReadLine(); 
     var values = line.Split(','); 
     if(values[2].Contains("A")){ 
      values[2] = values[2].Substring(0,values[2].IndexOf("A")); 
      values[2].Replace("\"", ""); 
      values[2] = values[2].Trim(); 
     } 

     if(values[2].Contains("P")){ 
      values[2] = values[2].Substring(0, values[2].IndexOf("P")); 
      values[2].Replace("\"", ""); 
      values[2] = values[2].Trim(); 
     } 
     gpsDataList.Add(new GpsFileClass(Convert.ToDouble(values[0]), Convert.ToDouble(values[1]), Convert.ToString(values[2]))); 
    } 
} 

一旦我有一個列表中的文件數據>我想做一些日期比較和計算。但首先;我儘量包含最新信息DATETIME這樣的字符串數據轉換:

public void SaveFrameGpsCoordinate() 
{ 
    int listSize = gpsDataList.Count; 

    DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo(); 
    dateTimeFormatInfo.ShortDatePattern = "dd-MM-yyyy HH:mm:ss"; 
    dateTimeFormatInfo.DateSeparator = "/"; 

    //DateTime tempDateA = DateTime.ParseExact(gpsDataList[0].timeCaptured, "dd/MM/yyyy HH:mm:ss",null); 
    //DateTime tempDateB = DateTime.ParseExact(gpsDataList[lastRecordData].timeCaptured, "dd/MM/yyyy HH:mm:ss", null); 

    DateTime tempDateA = Convert.ToDateTime(gpsDataList[0].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat); 
    DateTime tempDateB = Convert.ToDateTime(gpsDataList[lastRecordData].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat); 
} 

正如你可以看到,即使ParseExact拋出同樣的異常,我想它(因此評論說出來)。

這種問題有很多解決方案,但似乎沒有在我的工作。我得到該DateTime默認情況下使用en-US calture。但是當我甚至當我把文化改變成「af-ZA」時,我也會得到同樣的例外。

請幫忙。

+2

tldr;但2/27/2014是M-dd-yyyy,而不是dd-MM-yyyy – franssu

+0

正如旁白一樣,默認情況下DateTime不使用en-US,但使用機器設置的當前UI文化。 –

+0

好的,謝謝你的信息。 :) – Tumelo

回答

0

我不相信它;保存列表<>大小的變量超出範圍(查看下面代碼的第3行),但由於某種原因,它沒有拋出「超出範圍的異常」。

public void SaveFrameGpsCoordinate() 
{ 
    int listSize = gpsDataList.Count - 1; 

    DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo(); 
    dateTimeFormatInfo.ShortDatePattern = "dd-MM-yyyy HH:mm:ss"; 
    dateTimeFormatInfo.DateSeparator = "/"; 

    //DateTime tempDateA = DateTime.ParseExact(gpsDataList[0].timeCaptured, "dd/MM/yyyy HH:mm:ss",null); 
    //DateTime tempDateB = DateTime.ParseExact(gpsDataList[lastRecordData].timeCaptured, "dd/MM/yyyy HH:mm:ss", null); 

    DateTime tempDateA = Convert.ToDateTime(gpsDataList[0].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat); 
    DateTime tempDateB = Convert.ToDateTime(gpsDataList[lastRecordData].timeCaptured.Replace("\"", ""), System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat); 
} 
0

可以使用ParseExact方法

var dateTime = DateTime.ParseExact("2/27/2014 10:10:55", 
        "M/d/yyyy h:m:s", CultureInfo.InvariantCulture); 
相關問題