我有以下字符串
\\server\f$\direct1\205486060518032015-05-28 150931.rtf
其中包含yyyy-MM-dd hhmmss
现在我已设法使用正则表达式
提取该字符串Regex rgx = new Regex(@"\d{4}-\d{2}-\d{2} \d{6}");
di = new DirectoryInfo(Location);
var fileList = di.GetFiles("*.*", SearchOption.TopDirectoryOnly);
foreach (FileInfo fi in fileList)
{
EngineEvent(this, new EngineEventProperties(String.Format("Filename: {0}", fi.FullName)));
DateTime fileDate = DateTime.Now;
Match mat = rgx.Match(fi.FullName);
.
.
.
}
匹配包含预期的字符串'2015-05-28 150931'
但是当我尝试使用以下代码将其转换为DateTime
时if (DateTime.TryParseExact(fi.FullName, "yyyy-MM-dd hhmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileDate))
{
Console.WriteLine("Date : {0}", fileDate);
};
它返回false,使用ParseExact失败,说字符串不包含日期。
那我怎么做转换?
答案 0 :(得分:4)
使用以下格式:
"yyyy-MM-dd HHmmss"
HH
为24小时时间格式,hh
为12小时格式。 15
不符合12小时的时间格式,因此失败。
试一试:
DateTime temp;
if (DateTime.TryParseExact("2015-05-28 150931", "yyyy-MM-dd HHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp))
{
Console.WriteLine("Date : {0}", temp);
};
总是很好地为Custom Date and Time Format Strings页面添加书签!
答案 1 :(得分:3)
您正在尝试解析全名,而不仅仅是匹配的部分。尝试
Match mat = rgx.Match(fi.FullName);
if (mat.success)
{
if (DateTime.TryParseExact(mat.Value, "yyyy-MM-dd HHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileDate))
{
Console.WriteLine("Date : {0}", fileDate);
};
}
else
{
// no natch found...
}
同时将小时匹配更改为@Jonesy标识的24小时(HH
)