如何在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
相关产品推荐
相关产品推荐

