VB.Net - 我如何定制我的函数来读取新文件名结构的日期?

时间:2013-07-09 22:56:54

标签: vb.net

下午,

如何在VB.net中定制以下函数来拾取数组中文件名第二部分的前8个字符?

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length = 3 Then
        Dim dt As DateTime
        If DateTime.TryParseExact(parts(1), "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function

之前我使用过这个函数,因为文件名将被分成3个部分,所以这对我来说非常合适。文件名在下面看起来如下:

542656-20130402-FTO Disclosure.pdf
548872-20120501-Funds a.pdf
848581-20110215-Alpha.pdf

现在的问题是文件名结构已经改变,现在将分为两部分:

542656-20130402.pdf
548872-20120501.pdf
848581-20110215 Alpha.pdf
652162-20120711 a.pdf

那么我将如何定制上述函数仍然用“ - ”分割文件名,而不是试图准确地解析日期,因为它只是查看第二部分的前8个字符(正在日期)并继续使用其余的代码?

请告知。 甲

1 个答案:

答案 0 :(得分:2)

如果您将拆分呼叫和长度检查更改为:

Dim parts() As String = fileName.Split("-"c, "."c, " "c)
If parts.Length > 2 Then

然后现有代码应该在两个版本上都能正常工作。


编辑以回应评论:

为了使这个工作在像“12764-20120124b.pdf”这样的文件上,你需要直接提取子字符串:

Private Function GetFormattedDateFromFileName(ByVal fileName As String) As String
    Dim parts() As String = fileName.Split("-")
    If parts.Length > 1 AndAlso parts(1).Length >= 8 Then
        Dim dt As DateTime
        Dim dtStr = parts(1).Substring(0, 8)
        If DateTime.TryParseExact(dtStr, "yyyyMMdd", Nothing, Globalization.DateTimeStyles.None, dt) Then
            Return dt.ToString("MM/dd/yyyy")
        End If
    End If
    Return ""
End Function