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

如何在VBA中将Fri Jun 30 '17, 11:15:56 am格式日期转为mm/dd/yyyy?

解决VBA中自定义日期字符串转mm/dd/yyyy格式的问题

我来帮你搞定这个日期转换的问题!你直接用Format()函数失效的原因很简单:Fri Jun 30 '17, 11:15:56 am这种格式不是VBA默认能识别的标准日期格式,Format()必须先处理**日期型(Date)**数据才能生效。所以咱们得先把这个自定义字符串转成Date类型,再格式化就行。

下面给你两种可行的方法:

方法一:拆分字符串重组日期(兼容性强,不受区域设置影响)

这种方法手动提取日期的各个部分,不管系统区域是什么都能用:

Sub ConvertCustomDateFormat()
    Dim originalDate As String
    Dim dateSegments() As String
    Dim monthNum As Integer
    Dim dayVal As Integer
    Dim yearVal As Integer
    Dim finalDate As Date
    
    ' 替换成你的目标字符串
    originalDate = "Fri Jun 30 '17, 11:15:56 am"
    
    ' 拆分字符串获取各部分
    dateSegments = Split(originalDate, " ")
    monthNum = GetMonthNumber(dateSegments(1)) ' 把Jun转成6
    dayVal = CInt(dateSegments(2)) ' 获取日期30
    yearVal = CInt(Replace(dateSegments(3), "'", "")) + 2000 ' 去掉单引号后转成2017
    
    ' 生成日期型数据
    finalDate = DateSerial(yearVal, monthNum, dayVal)
    
    ' 输出目标格式
    Debug.Print Format(finalDate, "mm/dd/yyyy") ' 结果:06/30/2017
End Sub

' 辅助函数:把月份缩写转成数字
Function GetMonthNumber(monthAbbr As String) As Integer
    Select Case UCase(monthAbbr)
        Case "JAN": GetMonthNumber = 1
        Case "FEB": GetMonthNumber = 2
        Case "MAR": GetMonthNumber = 3
        Case "APR": GetMonthNumber = 4
        Case "MAY": GetMonthNumber = 5
        Case "JUN": GetMonthNumber = 6
        Case "JUL": GetMonthNumber = 7
        Case "AUG": GetMonthNumber = 8
        Case "SEP": GetMonthNumber = 9
        Case "OCT": GetMonthNumber = 10
        Case "NOV": GetMonthNumber = 11
        Case "DEC": GetMonthNumber = 12
    End Select
End Function

方法二:预处理字符串后用CDate转换(更简洁,依赖区域设置)

如果你的Windows系统区域设置支持英文月份缩写(比如能识别Jun),可以用这种更简单的方式:

Sub QuickConvertDateFormat()
    Dim originalDate As String
    Dim cleanedStr As String
    Dim finalDate As Date
    
    originalDate = "Fri Jun 30 '17, 11:15:56 am"
    
    ' 清理字符串:去掉开头的星期(Fri )和年份的单引号
    cleanedStr = Mid(originalDate, 5) ' 从第5位开始取,去掉前4位的"Fri "
    cleanedStr = Replace(cleanedStr, "'", "") ' 把'17改成17
    
    ' 直接转成日期型
    finalDate = CDate(cleanedStr)
    
    ' 格式化输出
    Debug.Print Format(finalDate, "mm/dd/yyyy") ' 结果:06/30/2017
End Sub

小提示

  • 方法一兼容性拉满,不管你系统是中文还是英文区域都能用;
  • 方法二更简洁,但如果系统区域是中文,可能识别不了英文月份缩写,这时候就用方法一准没错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:29:34