将字符串转换为DateTime格式 - 格式错误

时间:2014-05-15 08:37:54

标签: c# wpf datetime

我真的无法理解为什么这不想工作。我得到一个例外:

  

字符串未被识别为有效的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])));
    }
}

一旦我将文件数据放入List&lt;&gt;我想做一些日期比较和计算。但首先;我尝试将包含日期信息的字符串数据转换为日期时间,如下所示:

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”,我也会得到同样的例外。

请帮忙。

3 个答案:

答案 0 :(得分:0)

您可以使用ParseExact方法

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

答案 1 :(得分:0)

&#39; DD&#39;期望2位数日期。您可能想要使用&#39; d&#39;代替。 同样地,&#39; MM&#39;预计2个月的月份 - 再次你可能想要使用&#39; M&#39;代替。

来源:http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

答案 2 :(得分:0)

我不相信;保存List&lt;&gt;大小的变量超出范围(检查下面代码的第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);
}
相关问题