我有一个日期的文本文件,如下所示:
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
我怎样摆脱这个?
再次感谢,伙计们!
答案 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);
}