DateTime解析

Ako*_*old 29 c# datetime parsing

我正在编写一个syslog服务器,它接收syslog消息并将它们存储在数据库中.

我试图将消息中收到的日期字符串解析为DateTime结构.

对于以下示例,为了清晰起见,我将使用下划线代替空格; 收到的实际字符串有空格.

我收到的字符串格式是"Jun__7_08:09:10"- 请注意月和日之间的两个空格.

如果日期在10日之后,则字符串变为"Jun_10_08:09:10"(一个空格).

如果我解析:

DateTime.ParseExact(Log.Date, "MMM  d HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

它适用于从第1到第9的字符串,但是从第10个向前抛出异常,如果我用一个空格解析,它会在1到9日抛出异常(并且从第10个开始工作).

解析这个字符串的正确方法是什么?

Mik*_*oud 48

考虑使用此行:

DateTime.ParseExact(Log.Date,
    "MMM d HH:mm:ss",
    CultureInfo.InvariantCulture,
    DateTimeStyles.AllowWhiteSpaces);
Run Code Online (Sandbox Code Playgroud)

请注意,我删除了月份和日期之间的空格.那是因为AllowWhiteSpaces字面意思是:

指定s可能包含未由格式定义的前导,内部和尾随空格.

  • 也许只是'AllowInnerWhite`更具体,但+1,我直到现在才知道这些选项:) (3认同)
  • +1 - 告诉我我应该更仔细地看看`DateTimeStyles` :) (3认同)

Ode*_*ded 23

使用DateTime.ParseExact带有一组格式字符串的重载:

DateTime.ParseExact(Log.Date, 
                    new [] {"MMM  d HH:mm:ss", "MMM d HH:mm:ss"}, 
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None);
Run Code Online (Sandbox Code Playgroud)

  • @Tory - 真的.你的意思就像我的例子中那个? (2认同)
  • 是的,就像我评论它时那个不在你的例子中的那个.,P (2认同)