C # Как преобразовать неправильную дату и время String в DateTime? - PullRequest
3 голосов
/ 14 декабря 2010

У меня есть программа, которая преобразует неправильную строку даты и времени в системный DateTime.

Однако, поскольку система не распознает неправильные строки, метод .ParseExact, toDateTime и TryParse не работает.

Есть только 2 типа строк даты и времени, которые программа должна преобразовать:

 Thu Dec  9 05:12:42 2010
 Mon Dec 13 06:45:58 2010

Обратите внимание, что для одиночной даты используется двойной интервал, и я использовал метод .replace для преобразования единой даты в Thu Dec 09 05:12:42 2010.

Может кто-нибудь посоветуете пожалуйста коды? Спасибо!

Коды:

        String rb = re.Replace("  ", " 0");

        DateTime time = DateTime.ParseExact(rb, "ddd MMM dd hh:mm:ss yyyy", CultureInfo.CurrentCulture);

        Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss"));

Ответы [ 3 ]

6 голосов
/ 14 декабря 2010

Я бы действительно избегал регулярных выражений и использовал бы уже встроенный .NET ( TryParseExact метод и форматы даты ):

DateTime result;
string dateToParse = "Thu Dec  9 05:12:42 2010";
string format = "ddd MMM d HH:mm:ss yyyy";

if (DateTime.TryParseExact(
    dateToParse, 
    format,
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AllowWhiteSpaces, 
    out result)
)
{
    // The date was successfully parsed => use the result here
}
0 голосов
/ 14 декабря 2010

Это пример кода, который вы можете попробовать:

        var str = "Thu Dec  9 06:45:58 2010";
        if (str.IndexOf("  ") > -1)
        {
            str = str.Replace("  ", " ");
            DateTime time = DateTime.ParseExact(str, "ddd MMM d hh:mm:ss yyyy", null);
        }
        else
        {
            DateTime time = DateTime.ParseExact(str, "ddd MMM dd hh:mm:ss yyyy", null);
        }
0 голосов
/ 14 декабря 2010

Вы должны записать части вашей даты и времени в группы захвата в объекте сопоставления, а затем воссоздать их по своему усмотрению.

Вы можете использовать этот оператор Regex с именованными группами, чтобы упростить

((?<day>)\w{3})\s+((?<month>)\w{3})\s+((?<date>)\d)\s((?<time>)[0-9:]+)\s+((?<year>)\d{4})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...