3

我有一些以日期命名的子目录,如下所示:

C:\SomeDirectory\201309\01
C:\SomeDirectory\201309\02
C:\SomeDirectory\201309\03
C:\SomeDirectory\201309\04
C:\SomeDirectory\201309\05

等等

我要做的是获取目录列表,然后使用 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);

但是,我想更改 TryParseExact 部分,这样我就不必替换反斜杠 - 如下所示:

DateTime.TryParseExact(
    d.Substring(Math.Max(0, d.Length - 9)),
    @"yyyyMM\dd",
    CultureInfo.Invarient,
    DateTimeStyles.None,
    out dt)

但是,TryParseExact 似乎不喜欢这种格式。我在想这可能与 CultureInfo 有关 - 但我无法找到可能的解决方案来帮助我使用反斜杠。

任何帮助将不胜感激!

4

1 回答 1

8

根据MSDN上的自定义日期和时间格式字符串\是转义字符。因此,@"yyyyMM\dd"它从 first 中删除了特殊含义d。您应该转义\

要在结果字符串中包含反斜杠,您必须使用另一个反斜杠 ( \\) 对其进行转义。

所以尝试以下:

DateTime.TryParseExact(
    d.Substring(Math.Max(0, d.Length - 9)),
    @"yyyyMM\\dd",
    CultureInfo.InvariantCulture,
    DateTimeStyles.None,
    out dt)
于 2013-09-18T13:20:49.403 回答