我目前正在执行一项任务,我要获取2个.csv文件的内容并将它们放入一个新的.csv文件中,并按日期对内容进行排序。
到目前为止很好...问题在于内容使用了几种日期时间格式
你们中的一个可以帮助我吗?
这里是我到目前为止的代码
//reading the raw files
string[] rawdata = File.ReadAllLines(PathInRaw);
string[] rawdataTick = File.ReadAllLines(PathInRawTick);
//clearing existing file and writing in the new content
File.WriteAllText(PathOut, " ");
File.AppendAllLines(PathOut, rawdata);
File.AppendAllLines(PathOut, rawdataTick);
//changing date format??? which i dont get to work
string[] list = { };
int counter = 0;
foreach (string line in File.ReadAllLines(PathOut))
{
column = line.Split(';');
column[0] = DateTime.Now.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
list[counter] = Convert.ToString(column);
counter++;
}
File.WriteAllText(PathOut, " ");
File.WriteAllLines(PathOut, list);
//sorting it
DateTime d = DateTime.MinValue;
var query = from line in File.ReadLines(PathOut)
let fields = line.Split(';')
let dateParsed = DateTime.TryParse(fields[0], out d)
let dateObject = dateParsed ? d : DateTime.MinValue
orderby dateParsed, dateObject
select line;
List<string> sortedLines = query.ToList();
File.WriteAllText(PathOut, " ");
File.WriteAllLines(PathOut, sortedLines);
.csv中的日期格式是
2018/5/30下午2:48:57(MM / dd / yyyy HH:mm:ss a)
06.01.2018 06:12:19(MM.dd.yyyy HH:mm:ss)
20180601 16:21:50(yyyyMMdd HH:mm:ss)
答案 0 :(得分:0)
前两种格式应该足够标准,才能使用DateTime.Parse(...)
进行解析。最后一个有点太习惯了,以至于无法抓住,因此实现解析方法将是您最好的选择。
private static DateTime ParseDateTime(string dateTime) {
DateTime? d1 = null;
try {
d1 = DateTime.Parse(dateTime);
}
catch { }
if (d1 == null) {
try {
d1 = DateTime.ParseExact(dateTime, "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture);
}
catch { }
}
return (DateTime)d1;
}
在这里,第一个try catch块将捕获所有标准格式,如果不捕获,则d1
对象仍为null
,因此我们将尝试您的自定义格式。最后,我们将其投射回一个不可为空的DateTime
对象,以使其更易于使用。
下面是一种使用此方法的方法,您可以通过读取文件来替换两个DateTime字符串的硬编码列表。
List<string> rawLines1 = new List<string>() { "5/30/2018 2:48:57 PM", "06.01.2018 06:12:19" };
List<string> rawLines2 = new List<string>() { "20180601 16:21:50" };
List<string> rawLines = new List<string>();
rawLines.AddRange(rawLines1);
rawLines.AddRange(rawLines2);
List<DateTime> parsedDateTimes = new List<DateTime>();
foreach (string rawLine in rawLines) {
parsedDateTimes.Add(ParseDateTime(rawLine));
}
parsedDateTimes = parsedDateTimes.OrderBy(x => x).ToList();
最后一行负责按最旧的顺序排回到顶部。如果您希望将其撤消,请将.OrderBy(x => x)
替换为.OrderByDescending(x => x)
您可以从这里写回输出文件。