从字符串

时间:2016-01-20 22:29:40

标签: c# date parsing string-parsing

论坛。

我的代码从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问题和Googled文章拼凑而成。根据我的阅读,我认为它失败了,因为它只期待一个日期字符串。

对于解决方案和/或方向的任何建议,我们都非常感谢您寻找解决方案的文本。

2 个答案:

答案 0 :(得分:3)

您可以使用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}的作用:
enter image description here

答案 1 :(得分:0)

 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";
  }