【问题标题】:Extracting a Date value from a string从字符串中提取日期值
【发布时间】:2016-01-20 22:29:39
【问题描述】:

论坛。

我的代码从 excel 文件中读取并在变量“textContainingDate”中获取以下字符串:

"Employee Filter: All Employees; Time Entry Dates: 01/07/2016-01/07/2016; Exceptions: All Exceptions"

我想做的是从字符串中提取日期值。尽管有两个日期可以作为日期范围读取,但这两个日期将始终相同。我的想法是,无论在何种情况下,我都会对遇到的第一次约会感到满意。

var dateTime = DateTime.ParseExact(textContainingDate, "MM/dd/yyyy", CultureInfo.CurrentCulture);

我尝试使用上述语句,这些语句是从其他 stackoverflow 问题和 Google 文章中拼凑而成的。根据我的阅读,我相信它失败了,因为它只需要一个日期字符串。

任何关于解决方案和/或关于阅读什么文本以找到解决方案的方向的建议都表示赞赏。

【问题讨论】:

  • 使用正则表达式获取日期字符串,然后使用你的方法将其转换为DateTime
  • 日期前的文字总是一样的吗?如果是这种情况,您可以使用简单的子字符串来剪切日期
  • DateTime.ParseExact() 方法将01/20/2012 之类的字符串完全解析为日期对象。您正在尝试将包含日期值的整个字符串转换为不可能的日期对象。使用正则表达式提取日期字符串并将其解析为日期对象。

标签: c# date parsing string-parsing


【解决方案1】:

您可以使用Regex.Match 获取您遇到的第一个日期字符串。此方法返回与输入字符串中的正则表达式模式匹配的第一个子字符串。

string stringWithDate = "Employee Filter: All Employees; Time Entry Dates: 01/07/2016-01/07/2016; Exceptions: All Exceptions";
Match match = Regex.Match(stringWithDate, @"\d{2}\/\d{2}\/\d{4}");
string date = match.Value;
if (!string.IsNullOrEmpty(date)) {
    var dateTime = DateTime.ParseExact(date, "MM/dd/yyyy", CultureInfo.CurrentCulture);
    Console.WriteLine(dateTime.ToString());
}

正则表达式\d{2}\/\d{2}\/\d{4}的作用:

【讨论】:

    【解决方案2】:
     var regex = new Regex(@"\d{2}\/\d{2}\/\d{4}");
     foreach (Match m in regex.Matches(line))
     {
      DateTime dt;
      if (DateTime.TryParseExact(m.Value, "MM/dd/yyyy", null, DateTimeStyles.None, out dt))
      remittanceDateArr[chequeNo - 1] = dt.ToString("MM/dd/yyyy");                                   
      rtbExtract.Text = rtbExtract.Text + remittanceDateArr[chequeNo - 1] + "\n";
      }
    

    【讨论】:

    • 对我来说,上面的代码可以从文本字符串中获取日期。
    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2011-02-17
    • 2020-08-14
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多