如何读取日期的文本文件并将其转换为可以在C#中排序的数组?

时间:2015-04-22 04:53:37

标签: c# sorting date datetime

我有一个日期的文本文件,如下所示:

16/02/2015
13/02/2015
12/02/2015
11/02/2015
10/02/2015
09/02/2015

等等。

我如何将其转换为可以快速排序的东西? 我已经在读这样的文本文件了

string[] Date = System.IO.File.ReadAllLines("Date.txt");

我尝试过这样的事情:

double[] Dates = Array.ConvertAll(Date, s => DateTime.Parse(s));

这只是不起作用。

通过我的算法后,我想要的输出是将它们按顺序排列,但输出的格式与我之前显示的相同。

任何建议都将不胜感激。谢谢你的阅读。

修改

所以我设法按照我希望的方式输出日期:

string[] Date = System.IO.File.ReadAllLines("Date.txt");
DateTime[] Dates = Array.ConvertAll(Date, s => DateTime.Parse(s));

然而,它也在输出时间。

19/01/2014 00:00:00

我怎样摆脱这个?

再次感谢,伙计们!

4 个答案:

答案 0 :(得分:4)

DateTime.ParseExact采用字符串和格式解析为DateTime对象。

使用linq ...

dates.Select(p=> DateTime.ParseExact(p, @"dd/MM/yyyy");

应该返回一组日期,然后您可以对其进行排序。

答案 1 :(得分:1)

您可以尝试以下代码段

 string[] Dates = File.ReadAllLines("Date.txt");
            var sortableDates = Dates
                .Select<string, DateTime>(d => DateTime.ParseExact(d, "dd/MM/yyyy", CultureInfo.InvariantCulture))
                .ToArray<DateTime>();

根据编辑问题更新答案,

var sortableDates = File.ReadAllLines("Date.txt")
                .Select<string, DateTime>(d => DateTime.ParseExact(d, "dd/MM/yyyy", CultureInfo.InvariantCulture))
                .OrderBy<DateTime, DateTime>(d => d)
                .Select<DateTime, string>(d => d.ToString("dd/MM/yyyy"))
                .ToArray<string>();

根据用户实施回答,

var result = Array.ConvertAll<string, DateTime>(Dates, d => DateTime.ParseExact(d, "dd/MM/yyyy", CultureInfo.InvariantCulture))
                 .OrderBy<DateTime, DateTime>(d => d)
                 .Select<DateTime, string>(d => d.ToString("dd/MM/yyyy"))
                 .ToArray<string>(); 

答案 2 :(得分:0)

您可以完全避免转换为以这种方式执行此操作的日期的问题:

System.IO.File.ReadAllLines("Date.txt")
    .OrderBy(x => x.Substring(6, 4) + x.Substring(3, 2) + x.Substring(0, 2));

这只能起作用,因为每行的数据都是一致的。

答案 3 :(得分:-1)

int ConvertDate(string date)
    {
        string day = "";
        string month = "";
        string year = "";
        int count = 0;

        foreach(char c in date)
        {
            if(count < 2)
                day = day + c;
            else if(count > 5)
                year = year + c;
            else if(c != '/')
                month = month + c;

            count++;
        }

        string tempDate = year + month + day;
        return Convert.ToInt32(tempDate);
    }