You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用VB.NET从不同格式文件名中提取日期?

修正VB.NET代码以适配两类文件名

问题分析

原代码通过Split("-")(1)提取日期片段,但第一类文件名Mozart - Cpt - 03 Aug 2024.xlsx包含两个-,取索引1得到的是Cpt,无法转换为日期,导致逻辑失效。需要换一种方式精准定位日期所在的部分。

方案一:从末尾截取日期片段

日期始终位于最后一个-和.xlsx之间,因此可以通过定位最后一个-的位置来提取日期:

' 替换为你的实际文件路径
Dim filePath As String = "Mozart - Cpt - 03 Aug 2024.xlsx"
Dim fileName As String = Path.GetFileName(filePath)

' 找到最后一个"-"的位置
Dim lastDashIndex As Integer = fileName.LastIndexOf("-")
' 截取最后一个"-"后到".xlsx"前的内容,去除前后空格
Dim datePart As String = fileName.Substring(lastDashIndex + 1, fileName.IndexOf(".xlsx") - lastDashIndex - 1).Trim()
' 转换为目标日期格式
Dim mDate As String = Format(CDate(datePart), "yyyy/MM/dd")

方案二:用正则表达式匹配固定格式日期

如果日期格式固定为dd MMM yyyy(如03 Aug 2024),正则表达式可以直接匹配目标日期,适配性更强:

Imports System.Text.RegularExpressions
Imports System.IO

' 替换为你的实际文件路径
Dim filePath As String = "Mozart - 03 Aug 2024.xlsx"
Dim fileName As String = Path.GetFileName(filePath)

' 匹配dd MMM yyyy格式的日期
Dim dateRegex As New Regex("\d{2} \w{3} \d{4}")
Dim dateMatch As Match = dateRegex.Match(fileName)

If dateMatch.Success Then
    ' 指定英文区域确保月份缩写识别正常
    Dim enCulture As New Globalization.CultureInfo("en-US")
    Dim mDate As String = Format(CDate(dateMatch.Value, enCulture), "yyyy/MM/dd")
    ' 后续可使用转换后的mDate
End If

额外说明

  • 确保代码引用System.IO命名空间(用于Path类),正则方案需额外引用System.Text.RegularExpressions。
  • 若系统区域非英文,转换日期时指定en-US文化信息可避免月份缩写识别失败。

内容的提问来源于stack exchange,提问作者Skye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:39:53