将字符串转换为日期时间格式-格式错误



我真的不能理解为什么这不想工作。我得到一个异常:

字符串未被识别为有效的日期时间。

我正在从文件中读取字符串日期,看起来像这样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文化。但是当我甚至当我将文化改为"af-ZA"时,我得到同样的异常。

请帮。

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

您可以使用ParseExact方法

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

'dd'需要一个2位数的日期。你可能想用"d"来代替。类似地,'MM'期望一个2位数的月份-同样,您可能希望使用'M'代替。

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

相关内容

  • 没有找到相关文章

最新更新