2016-07-07 46 views
1

Ich habe viele Post gelesen, aber nichts hat wirklich geholfen. Meine Frage sieht ähnlich aber etwas anders aus.EPOC-Datum auf Normales Systemdatum in VBS

Ich muss EPOC Zeit Systemzeitformat ändern.

data type = datetime 
value= 20160630165419.634204+060 

gewünschten Ausgangs Datentyp = Datumzeit

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

als EPOC Wert hat Ziffern nach Punkt und der Datentyp Date, die es schwierig zu teilen sie durch 10 in einer Schleife, und erhalten ingteral macht Wert. Bitte schlagen Sie nur eine Lösung für das angegebene Eingabeformat vor.

Antwort

1

Sie diese Funktion WMIDateStringToDate für die Umwandlung Ihrer Datum verwenden:

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

Dank es funktioniert –

0

Schritt 1: DateSerial() und TimeSerial() auf Zahlen verwenden (CInt() aus Ihrer Eingabe extrahiert) (Mid())

Schritt 2 eine Variante des Subtyps Datum zu erhalten: SetLocale() und Replace() zu Format verwenden/stringify das Datum

>> 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 

Gefahr, Will Robinson! Schauen Sie sich das Testskript:

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 

und seine Ausgabe:

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 

für den Grund zu sehen:

Die Beispielskripts werden von keinem Microsoft Standard Förderprogramms unterstützt oder Service. Die Beispielskripte werden ohne Gewähr für die jeweilige Art wie folgt bereitgestellt: . Microsoft lehnt ferner alle implizierten Garantien ab, einschließlich, ohne Einschränkung, implizierte Gewährleistungen von Marktgängigkeit oder Eignung für einen bestimmten Zweck. Das gesamte Risiko, das sich aus der Verwendung oder Leistung der Beispielskripte und der Dokumentation ergibt, verbleibt bei Ihnen. In keinem Fall werden Microsoft, seine Autoren oder andere an der Erstellung, Produktion oder beteiligten Scripts für etwaige Schäden haftbar gemacht (einschließlich, ohne Einschränkung, Schadensersatz für entgangenen Gewinn, Betriebsunterbrechung, Verlust von Geschäftsinformationen oder andere Vermögensschäden), die sich aus der Verwendung oder der Unfähigkeit ergeben, die Beispielskripte oder Dokumentation zu verwenden, selbst wenn Microsoft von die Möglichkeit solcher Schäden in Kenntnis gesetzt wurde. (gefunden here)