2015-07-15 17 views
1

Я пытаюсь разобрать даты/времени форматы в HTTP/1.1 заголовки, как указано в RFC2616DateTime Анализировать ANSI C метка времени

Как разобрать временную метку ANSI C в C#?
Ближайший я получаю:

string dateFormat = "ddd MMM d HH':'mm':'ss yyyy"; 
DateTime time = DateTime.ParseExact("Mon Jan 2 15:04:05 2006", dateFormat, CultureInfo.InvariantCulture); 

Проблема заключается в «г», которая не принимает ведущее место в случае, если она является одной датой цифры. И «dd» требует вместо этого 0.

Есть ли какой-либо простой способ, или, может быть, библиотека, которая уже обрабатывает три разрешенных формата даты/времени в HTTP/1.1?

+0

DateTime время = DateTime.ParseExact ("ПН 2 января 2006 15:04:05" .Надеть (" """) ...... избавится от дополнительного ведущего пространства – PaulF

+0

@PaulF Правда, я только что заметил DateTimeStyles.AllowInnerWhite, который имел бы аналогичный результат. Он позволил бы «сломанные» временные метки ANSI C всего 23 символа, но я не вижу, как это может вызвать проблемы. – ANisus

ответ

2

Как насчет использования DateTime.TryParseExact overload, который принимает string[] как параметр формата с AllowInnerWhite стиль?

string s = "Sun, 06 Nov 1994 08:49:37 GMT"; 
DateTime dt; 
var formats = new[] 
{ 
    "ddd, dd MMM yyyy HH:mm:ss 'GMT'", 
    "dddd, dd-MMM-yy HH:mm:ss 'GMT'", 
    "ddd MMM d HH:mm:ss yyyy" 
}; 
if(DateTime.TryParseExact(s, formats, CultureInfo.InvariantCulture, 
          DateTimeStyles.AllowInnerWhite, out dt)) 
{ 
    // 
} 
Смежные вопросы