0

我在日志文件中有日期。日志文件中的日期如下所示:

2012 年 5 月 14 日星期一 21:31:00 EDT

我想将其转换为格式“dd-MM-yyyy hh:mm:ss”

Dim DateVal1 As String 
Dim Date1 As Date

DateVal1 = "Mon May 14 21:31:00 EDT 2012"

Date1 = Format(DateVal,  "ddd mmm dd  hh:mm:ss EDT yyyy")
Date1 = Format(Date1 , "dd-MM-yyyy hh:mm:ss")

以下代码未转换为我期望的格式。任何想法,如果我在这里遗漏了什么。

谢谢

4

2 回答 2

1

您可能需要首先考虑从自定义日期时间字符串中提取日期时间组件。例如,您可以获得日、月、年等。您可能会使用字符串操作函数,例如MidReplace

如果您的自定义字符串是一致的,那么您可以创建自己的函数来执行字符串操作并输出日期时间值。

这里只是一个想法。希望能帮助到你。

于 2013-05-25T06:37:01.247 回答
0

如果您正在运行英文版的 Office(并且拥有英文操作系统),此功能应该会提供您需要的结果:

美国东部时间 2012 年 5 月 14 日星期一 21:31:00 >> 2012-05-14 21:31:00

Function DateConversion(DateVal1 As String)

    Dim DateParts As Variant
    DateParts = Split(DateVal1, " ")

    Dim i
    For i = 1 To 12
        If InStr(1, Left(MonthName(i), 3), DateParts(1), vbTextCompare) > 0 Then Exit For
    Next i

    DateConversion = CDate(DateSerial(DateParts(UBound(DateParts)), i, DateParts(2)) & " " & DateParts(3))

End Function

但是,如果您使用任何其他语言,则可能需要对月份名称进行一些额外的更改(MonthName 函数以您的系统语言返回月份名称)。

编辑:不同语言月份名称情况的解决方案

在这种情况下,我们需要创建带有月份名称的附加数组,以便能够比较原始数据字符串的一部分。

Function DateConversionEng(DateVal1 As String)

    Dim DateParts As Variant
        DateParts = Split(DateVal1, " ")
    Dim Months As Variant
        Months = Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "Octover", "November", "December")

    Dim i
    For i = 1 To 12
        If InStr(1, Months(i), DateParts(1), vbTextCompare) > 0 Then Exit For
    Next i

    DateConversionEng = CDate(DateSerial(DateParts(UBound(DateParts)), i + 1, DateParts(2)) & " " & DateParts(3))

End Function
于 2013-05-25T06:48:11.443 回答