Как получить дату из этой строки? - PullRequest
2 голосов
/ 07 октября 2009

У меня есть эта строка:

\tid <01CA4692.A44F1F3E@blah.blah.co.uk>; <b>Tue, 6 Oct 2009 15:38:16</b> +0100

и я хочу извлечь дату (ободренную) в более удобный формат, например, 06-10-2009 15: 38: 16

Как лучше всего это сделать?

Ответы [ 3 ]

11 голосов
/ 07 октября 2009

Regex может быть излишним. Просто разделите на ';', Trim() и позвоните Date.Parse(...), Он даже будет обрабатывать смещение часового пояса для вас.

using System;

namespace ConsoleImpersonate
{
    class Program
    {
        static void Main(string[] args)
        {

            string str = "\tid 01CA4692.A44F1F3E@blah.blah.co.uk; Tue, 6 Oct 2009 15:38:16 +0100";
            var trimmed = str.Split(';')[1].Trim();
            var x = DateTime.Parse(trimmed);

        }
    }
}
3 голосов
/ 07 октября 2009

Вы можете попробовать этот код (с возможными настройками)

Regex regex = new Regex(
      ";(?<date>.+?)",
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );

var dt=DateTime.Parse(regex.Match(inputString).Groups["date"].Value)
1 голос
/ 07 октября 2009

Вот подход регулярного выражения для соответствия формату. Результат даты отформатирован так, как вы указали.

string input = @"\tid 01CA4692.A44F1F3E@blah.blah.co.uk; Tue, 6 Oct 2009 15:38:16 +0100";
// to capture offset too, add "\s+\+\d+" at the end of the pattern below
string pattern = @"[A-Z]+,\s+\d+\s+[A-Z]+\s+\d{4}\s+(?:\d+:){2}\d{2}";
Match match = Regex.Match(input, pattern, RegexOptions.IgnoreCase);

if (match.Success)
{
    string result = match.Value.Dump();
    DateTime parsedDateTime;
    if (DateTime.TryParse(result, out parsedDateTime))
    {
        // successful parse, date is now in parsedDateTime
        Console.WriteLine(parsedDateTime.ToString("dd-MM-yyyy hh:mm:ss"));
    }
    else
    {
        // parse failed, throw exception
    }
}
else
{
    // match not found, do something, throw exception
}
...