Первые два формата должны быть достаточно стандартными, чтобы их можно было проанализировать с помощью 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)
Отсюда вы можете записать обратно в ваш выходной файл.