我有一些以日期命名的子目录,如下所示:
C:\SomeDirectory\201309\01
C:\SomeDirectory\201309\02
C:\SomeDirectory\201309\03
C:\SomeDirectory\201309\04
C:\SomeDirectory\201309\05
Run Code Online (Sandbox Code Playgroud)
等等
我要做的是获取目录列表,然后使用Linq根据日期范围限制我的结果.
我有这样的工作:
string path = @"C:\SomeDirectory";
DateTime f = new DateTime(2013, 9, 1);
DateTime t = new DateTime(2013, 9, 3);
DateTime dt;
var dirs =
Directory.GetDirectories(path, "*.*", SearchOption.AllDirectories)
.Where(d => DateTime.TryParseExact(
d.Substring(Math.Max(0, d.Length - 9)).Replace("\\", null),
"yyyyMMdd",
CultureInfo.Invarient,
DateTimeStyles.None,
out dt)
&& f <= dt
&& dt <= t);
Run Code Online (Sandbox Code Playgroud)
但是,我想更改TryParseExact部分,以便我不必替换反斜杠 - 就像这样:
DateTime.TryParseExact(
d.Substring(Math.Max(0, d.Length - 9)),
@"yyyyMM\dd",
CultureInfo.Invarient,
DateTimeStyles.None,
out dt)
Run Code Online (Sandbox Code Playgroud)
但是,似乎TryParseExact不喜欢那种格式.我当时认为这可能与CultureInfo有关 - 但我无法找到一个可能的解决方案来帮助我反斜杠.
任何帮助将不胜感激!
根据自定义日期和时间格式 MSDN \上的字符串是一个转义字符.所以在@"yyyyMM\dd"它中首先删除了特殊意义d.你应该逃避\:
要在结果字符串中包含反斜杠,必须使用另一个反斜杠(
\\)对其进行转义.
所以试试以下:
DateTime.TryParseExact(
d.Substring(Math.Max(0, d.Length - 9)),
@"yyyyMM\\dd",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt)
Run Code Online (Sandbox Code Playgroud)