我如何从以下字符串中获取日期?
“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格式。
提前感谢您的任何帮助!
答案 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();
}