C# - 使用StreamReader从String中提取日期

时间:2018-03-13 17:19:02

标签: c# csv parsing datetime

我如何从以下字符串中获取日期?

“DateOfTest_01-30-2018-1_003”

这个字符串位于CSV文件的第8位,我正在循环和解析。我所拥有的是:

while (!reader.EndOfStream) {
    var splitLine = reader.ReadLine().SplitCommaSeparatedValues();
    sample.RunDate = splitLine[8];
    WriteLog("Run Date = " + sample.RunDate);}

所以我需要从“_”和“-1”之间的字符串中提取字符,并将结果转换为/ mm / dd / yyyy格式。

提前感谢您的任何帮助!

5 个答案:

答案 0 :(得分:0)

在这种情况下,最好是正则表达式:“(DateOfTest _)(\ d {2} - \ d {2} - \ d {4})( - \ d_ \ d {3})”。第二组将是约会。在c#中,您可以使用Regex.Match。 MSDN

答案 1 :(得分:0)

使用DateTime.ParseExact

var culture = System.Globalization.CultureInfo.InvariantCulture;
var strToParse = splitLine[8].Substring(11, 10);
var date = DateTime.ParseExact(strToParse, "MM-dd-yyyy", culture);
var formattedStr = date.ToString("MM/dd/yyyy", culture);

答案 2 :(得分:0)

您可以使用Regex匹配来确定输入中的日期字符串。

var pattern = @"(?<=_)(.*?)(?=-1)";
var input = "DateOfTest_01-30-2018-1_003";
if (Regex.IsMatch(input, pattern))
{
    var dateStr = Regex.Match(input, pattern);
    var date = DateTime.ParseExact(dateStr.Value, "MM-dd-yyyy",null);
}

答案 3 :(得分:0)

除非您在确切的时刻完全需要数据,否则请将日期解析器移到读者之外。

之后,答案真的取决于该字段中的字符串是否始终以相同的方式格式化。

正如其他人所指出的那样,如果字符串总是具有相同的格式,则可以将字符串中的日期子字符串。然后你可以使用几种内置的日期格式方法之一,或者因为格式正确,所以做一个string.Replace(&#34; - &#34;,&#34; //&#34; )

如果字符串格式发生变化,您需要尝试使用一些正则表达式来帮助您识别要拔出的子字符串。

我最重要的一点是,我认为你应该在读者之外对你的领域进行这种格式化。

答案 4 :(得分:0)

string TestString = "DateOfTest_01-30-2018-1_003";
Regex TestRegex = new Regex(@"(DateOfTest_)(\d{2}-\d{2}-20\d{2})(-\d_\d{3})");
string ExactDateFormat = "MM-dd-yyyy";

        if (TestRegex.IsMatch(TestString))
        {
            Date = TestRegex.Match(TestString).Groups[2].ToString();
            Date = DateTime.ParseExact(Date, ExactDateFormat, null).ToShortDateString();
        }