2013-05-25 4 views
0

У меня есть Дата в файле журнала. Дата в лог-файл выглядит примерно так:Изменить формат даты в Excel VBA

Пн Май 14 21:31:00 EDT 2012

Я хотел бы, чтобы преобразовать это в формате «ДД-ММ-ГГГГ ЧЧ: мм: 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") 

Следующий код не преобразуется в формат, который я ожидал. Любая идея, если мне что-то не хватает.

Благодаря

+0

Общая проблема в вашем вопросе: определение месяца и дня недели: 'Mon May'. Для этой части потребуется некоторый дополнительный код. Будет ли ваше название месяца заполнено с полными именами (май, июнь, август) или с аббревиатурой 3 буквы (май, июнь, август)? –

+0

Всего 3 буквы, как я вижу – Kiran

ответ

1

Вы можете рассмотреть извлечения компонентов даты-времени из пользовательской строки даты и времени первой. Например, вы можете получить день, месяц, год и т. Д. Возможно, вы можете использовать функции манипуляции строками, такие как Mid, Replace и так далее.

Если ваша пользовательская строка согласована, вы можете создать свою собственную функцию, которая выполняет строковые манипуляции и выводит значение datetime.

Просто подумайте здесь. Надеюсь, поможет.

+0

Команда Format() не работает над этим? Это особый формат даты? – Kiran

+0

Вы можете ознакомиться с описанием API здесь: http://msdn.microsoft.com/en-us/library/office/gg251755.aspx – woodykiddy

+0

Для выражения datetime могут быть некоторые требования. – woodykiddy

0

Если вы работаете в английской версии офиса (и имеют английскую операционную систему), эта функция должна дать результаты, которые вам нужно:

пн 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 возвращает название месяцев на вашем языке системы).

EDIT: Решение для ситуации на разных языках названия месяцев

В этой ситуации нам нужно создать дополнительный массив названий месяцев, чтобы иметь возможность сравнить часть исходной строки данных.

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 
Смежные вопросы