在c#中从字符串中获取所有日期

本文关键字:获取 日期 字符串 | 更新日期: 2023-09-27 18:18:05

我使用的是一个基于web的DOTNET应用程序,其中我在数据库中有一个日志列,每当用户在UI上的评论文本区添加评论时,日期,他的名字以及评论都附加到数据库中的现有数据。下面是该列包含数据的格式:

04/05/11 17:10:19 (user2):Work Log -
Closing.
03/31/11 09:40:02 (user2):Work Log -
Support provided over phone.
03/31/11 09:39:43 (user1):Work Log –
Awaiting support reply
03/30/11 11:30:08 (user2):Work Log -
Manager notified by standard e-mail communication.
03/30/11 11:29:30 (user1):Work Log -
Emailed support team
03/30/11 11:28:52 (user1):Work Log -
I have an issue with my Xbox.

当输入这些评论时,我正在尝试拉出所有的日期(只是日期)。我试了很多方法,但都没用。

在c#中从字符串中获取所有日期

假设你想在c#代码中这样做:

Regex splitter = new Regex("[0-9]{2}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}");
foreach (Match m in splitter.Matches(theDatabaseValue)) {
    string dateString = m.Groups[0].Value;
    DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yy HH:mm:ss", null);
}

regex方法的好处是,您可以扩展它来提取用户:

Regex splitter = new Regex("(?<date>[0-9]{2}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}) ''((?<user>.+)'')");
foreach (Match m in splitter.Matches(theDatabaseValue)) {
    string dateString = m.Groups["date"].Value;
    DateTime dt = DateTime.ParseExact(dateString, "MM/dd/yy HH:mm:ss", null);
    string user = m.Groups["user"].Value;
    Console.WriteLine("{0} {1}", dt.ToString(), user);
}

,因此甚至消息(我还没有做正则表达式的那一部分,因为我不确定你是否在消息之前有换行符,似乎你有)。

一旦你完成了这些,你就可以创建一个有三列的数据库表,日期、用户、评论,然后使用正则表达式将现有的表转换成那个表,让你以后的工作变得容易得多!

您应该重构您的数据库,将数据存储在三列(DateTime, User, Comment)中,这将大大提高性能和可用性。

但是如果没有这个选项,你可以使用DateTime。TryParse从字符串中获取值。如:

        string comment = "04/05/11 17:10:19 (user2):Work Log - Closing.";
        string dateSection = comment.Substring(0, 17);
        DateTime date;
        if (!DateTime.TryParse(dateSection, out date))
        {
            throw new Exception(string.Format("unable to parse string '{0}'", dateSection));
        }