2016-07-07 3 views
1

Я прочитал много сообщений, но ничего не помогло. Мой вопрос выглядит похожим, но немного другим.Дата EPOC для нормальной системной даты в VBS

Мне нужно изменить время EPOC на формат системного времени. Тип

data type = datetime 
value= 20160630165419.634204+060 

требуемый выход данные = DateTime

value= 30/06/2016 16:54:19 

как значение EPOC имеет цифр после запятой, и тип данных даты и времени, что делает его трудно разделить его на 10 в цикле и получить ingteral стоимость. Пожалуйста, предложите решение только для данного формата ввода.

ответ

1

Вы можете использовать эту функцию для преобразования WMIDateStringToDate дату:

WScript.echo WMIDateStringToDate("20160227235343.000000+060") 
WScript.echo WMIDateStringToDate("20160630165419.634204+060") 
'************************************************************ 
Function WMIDateStringToDate(Mydate) 
WMIDateStringToDate = CDate(Mid(Mydate, 5, 2) & "/" & _ 
Mid(Mydate, 7, 2) & "/" & Left(Mydate, 4) _ 
& " " & Mid (Mydate, 9, 2) & ":" & _ 
Mid(Mydate, 11, 2) & ":" & Mid(Mydate,13, 2)) 
End Function 
'************************************************************ 
+0

спасибо, что он работает –

0

Шаг 1: использовать DateSerial() и TimeSerial() по номерам (CInt()), извлеченных из вашего входа (Mid()), чтобы получить вариант подтипа Дата

Шаг 2: использование SetLocale() и Replace() формат/stringify даты

>> SetLocale "de-de" 
>> sX = "20160630165419.634204+060" 
>> dtD = DateSerial(CInt(Mid(sX, 1, 4)), CInt(Mid(sX, 5, 2)), CInt(Mid(sX, 7, 2))) 
>> dtT = TimeSerial(CInt(Mid(sX, 9, 2)), CInt(Mid(sX, 11, 2)), CInt(Mid(sX, 13,2))) 
>> dtX = dtD + dtT 
>> WScript.Echo dtX, TypeName(dtX) 
>> WScript.Echo Replace(dtX, ".", "/") 
>> 
30.06.2016 16:54:19 Date 
30/06/2016 16:54:19 

Опасно, будет Робинзон! Посмотрите на этот тестовый сценарий:

Function WMIDateStringToDate(Mydate) 
WMIDateStringToDate = CDate(Mid(Mydate, 5, 2) & "/" & _ 
Mid(Mydate, 7, 2) & "/" & Left(Mydate, 4) _ 
& " " & Mid (Mydate, 9, 2) & ":" & _ 
Mid(Mydate, 11, 2) & ":" & Mid(Mydate,13, 2)) 
End Function 
'************************************************************ 
For Each sLocale In Split("de-de en-us") 
    SetLocale sLocale 
    For Each sDate In Split("20160227235343.000000+060 20160203235343.000000+060") 
     On Error Resume Next 
     dtX = WMIDateStringToDate(sDate) 
     If Err.Number Then dtX = Err.Description 
     On Error GoTo 0 
     WScript.Echo GetLocale(), sD, sDate, dtX 
    Next 
Next 

и его выход:

cscript 38249865.vbs 
1031 20160227235343.000000+060 27.02.2016 23:53:43 
1031 20160203235343.000000+060 02.03.2016 23:53:43 
1033 20160227235343.000000+060 27.02.2016 23:53:43 
1033 20160203235343.000000+060 03.02.2016 23:53:43 

видеть причину:

Примеры сценариев не поддерживаются при любой стандартной программы поддержки Microsoft или услуги. Образцы сценариев предоставляются в виде КАК ISA без каких-либо гарантий. Microsoft далее отказывается от всех подразумеваемых гарантий , включая, без ограничений, любые подразумеваемые гарантии товарной пригодности или пригодности для определенной цели. Весь риск, связанный с использованием или выполнением сценариев образца и , остается за вами. Ни при каких обстоятельствах Microsoft, ее авторов или кто-либо еще, участвующих в создании, производстве или , не несет ответственности за любые убытки (включая, помимо прочего, убытки от потери прибыли бизнеса, прерывание бизнеса, потеря деловой информации или другие денежные убытки ), возникающие из-за использования или невозможности использования образцов сценариев или документации , даже если Microsoft была уведомлена о возможности таких убытков от . (найдено here)