字符串未被识别为有效的DateTime:格式异常

时间:2011-10-13 09:21:47

标签: c# .net winforms string datetime

我有这样的路径......“C:\ restore \ restoredb \”

在那条路上我有这样的文件..

 backup-2011-10-12T17-16-51.zip
 backup-2011-10-11T13-24-45.zip

我有一个表格,在那种形式我有一个列表框和组合框(cbrestore)我有这样的组合框项目...月,3个月,6个月,年...

我想要的是,如果我选择组合框项目(月份),我想显示在这些日期之间存储的文件名(2011年10月12日至2011年12月12日)..

如果我选择组合框项目(3个月)我想显示这些日期之间(2011年10月12日至12月12日)存储在该文件夹中的文件名..在列表框中

为此我尝试过这个....但是,如果我选择组合框项目月份,那么我得到的错误就像我在下面提到的那样

 List<String> t = Directory.GetFiles(@"C:\restore\restoredb\").ToList();
    List<String> y = new List<string>();
    List<String> u = new List<string>();



    foreach (var zzz in t)
    {
        y.Add(Path.GetFileName(zzz));
    }


    if (comboBox1.Text == "Month")
    {
        u =
       (from String s in y where ((DateTime.Now.Month - DateTime.Parse(s.Substring(8, 10)).Month) < 1) && (DateTime.Now.Year - DateTime.Parse(s.Substring(8, 10)).Year == 0) select s).
           ToList();
    }

错误: 格式异常未处理,字符串未被识别为有效的日期时间。

在这一行

(DateTime.Now.Month - (DateTime.Parse(s.Substring(8, 10)).Month) < 1) && (DateTime.Now.Year - DateTime.Parse(s.Substring(8, 10)).Year == 0)

对此有任何帮助......

非常感谢.....

3 个答案:

答案 0 :(得分:1)

我认为你在索引中犯了一个错误。

尝试使用s.Substring(7,10)。

答案 1 :(得分:1)

在我看来你的索引不正确。你正在服用011-10-12T

s.Substring(7,10)

答案 2 :(得分:1)

s.Substring(8,10)是基于您输入的字符串“011-10-12T”,不会被解析为日期或日期的一部分。

尝试从inputstring构造一个日期时间,如:

 string input = "backup-2011-10-12T17-16-51.zip";

            string[] splitInputs = input.Split('-');

            DateTime inputDate = new DateTime(
                int.Parse(splitInputs[1]), //Year
                int.Parse(splitInputs[2]), //Month
                int.Parse(splitInputs[3].Split('T')[0]), //Day left of the T 
                int.Parse(splitInputs[3].Split('T')[1]), //Hour, right of the T
                int.Parse(splitInputs[4]), //Minutes
                int.Parse(splitInputs[5].Split('.')[0])); //Seconds, left of the .zip

使用constreucted DateTime进行比较。