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

0

英語版の Office を実行している場合 (および英語のオペレーティング システムを使用している場合)、この関数は必要な結果を提供するはずです。

月 5 月 14 日 21:31:00 EDT 2012 >> 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 に答える