eMi
eMi

Reputation: 5618

Get Date from String

Lets say I have one of following strings:

"Hello, I'm a String... This is a Stackoverflowquestion!! Here is a Date: 16.03.2013, 02:35 and yeah, plain text blah blah..-."

"This the other string! :) 22.11.2012. Its a Date you see"

"Here we have 2 Dates, 23.12.2012 and 14.07.2011"

What would be the best and fastest way to get these dates from the string (in DateTime)?

(Only First occured Date in String)

Desirable Returns:

String 1: 16.03.2013 (as a DateTime)
String 2: 22.11.2012 ("           ")
String 3: 23.12.2012 ("           ")

So I would call a method something like:

DateTime date1 = GetFirstDateFromString(string1);

Upvotes: 9

Views: 25521

Answers (5)

Adeel Kamran
Adeel Kamran

Reputation: 162

For me this code works to get Date from string text contains date.

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

Upvotes: 1

Ant P
Ant P

Reputation: 25221

If your dates are always in that format, you could try using a regex to grab the date string and then use DateTime.ParseExact to get the result you want:

public DateTime? GetFirstDateFromString(string input)
{
    DateTime d;

    // Exclude strings with no matching substring
    foreach (Match m in Regex.Matches(input, @"[0-9]{2}\.[0-9]{2}\.[0-9]{4}"))
    {
        // Exclude matching substrings which aren't valid DateTimes
        if (DateTime.TryParseExact(match.Value, "dd.MM.yyyy", null, 
            DateTimeStyles.None, out d))
        {
            return d;
        }
    }
    return null;
}

Upvotes: 7

Thomas Levesque
Thomas Levesque

Reputation: 292425

This will extract, parse and print all dates in the input text:

var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b");
foreach(Match m in regex.Matches(inputText))
{
    DateTime dt;
    if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
        Console.WriteLine(dt.ToString());
}

Now, if you just want the first date, you can do that:

static DateTime? GetFirstDateFromString(string inputText)
{
    var regex = new Regex(@"\b\d{2}\.\d{2}.\d{4}\b");
    foreach(Match m in regex.Matches(inputText))
    {
        DateTime dt;
        if (DateTime.TryParseExact(m.Value, "dd.MM.yyyy", null, DateTimeStyles.None, out dt))
            return dt;
    }
    return null;
}

Note that the method returns a nullable DateTime, so that it can return null when the string contains no date.

Upvotes: 20

Martin Mulder
Martin Mulder

Reputation: 12954

Try this:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static DateTime? GetFirstDateFromString(string input);
   {
      string pattern = @"\d{2}\.\d{2}\.\d{4}";
      Match m = Regex.Match(input, pattern);
      DateTime result;
      foreach(string value in match.Groups)  
          if (DateTime.TryParseExact(match.Groups[1], "dd.MM.yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out result)
              return result;
      return null;
   }
}

Upvotes: 1

lem.mallari
lem.mallari

Reputation: 1275

Create a method whose parameters are a regular expression to catch the date format and the string that you will be extracting the date from. I believe if you don't have a format that will be used then it won't be possible to extract the date from a series of alphanumeric characters in a string.

Upvotes: 0

Related Questions