Reputation: 5618
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
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
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
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
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
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