Wenn ich etwas nicht vermisse, müssen Sie lokale Zeit auf Remote-Rechner bekommen und es Zeitzone Offset, oder?
Here Ich sehe selbst Antwort basierend auf WMI Win32_TimeZone Bias
Eigenschaft. Aber nach diesem MSDN Beispiel: „Converting Local Time to UTC Time“, Zitat:
Verwenden Win32_ComputerSystem Current Eigenschaft, weil es automatisch die Zeitzone Bias für die Sommerzeit einstellt Win32_TimeZone Bias Eigenschaft nicht.
So, nächste Beispiel Funktion erhalten aktuelle Datum Zeit, und ich werde Ihnen überlassen, um es für konkrete Datum Zeitmessung zu ändern.
' "." mean local computer
WScript.Echo FormatDateTime(UTCDate("."), 0)
Function UTCDate(strComputer)
Dim objWMIService, ColDate, ColCS
On Error Resume Next
Set objWMIService = _
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set ColDate = objWMIService.ExecQuery("Select * From Win32_LocalTime")
UTCDate = DateSerial(100, 1, 1)
For Each objDate In ColDate
UTCDate = DateAdd("yyyy", ObjDate.Year - 100, UTCDate)
UTCDate = DateAdd("m", ObjDate.Month - 1, UTCDate)
UTCDate = DateAdd("d", ObjDate.Day - 1, UTCDate)
UTCDate = DateAdd("h", ObjDate.Hour, UTCDate)
UTCDate = DateAdd("n", ObjDate.Minute, UTCDate)
UTCDate = DateAdd("s", ObjDate.Second, UTCDate)
Next
' http://msdn.microsoft.com/en-us/library/windows/desktop/ms696015(v=vs.85).aspx
Set ColCS = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")
Dim TimeZoneOffset, LocalTimeZone
For Each LocalTimeZone In ColCS
TimeZoneOffset = LocalTimeZone.CurrentTimeZone
Next
If TimeZoneOffset < 0 Then
TimeZoneOffset = Abs(TimeZoneOffset)
Else
TimeZoneOffset = -Abs(TimeZoneOffset)
End If
UTCDate = DateAdd("n", TimeZoneOffset, UTCDate)
If Err Then UTCDate = vbNull
Set objWMIService = Nothing
End Function
[EDIT] Nun, sieht aus wie nicht dann auf MSDN vertrauen sollte (oder vielleicht diese Arbeit nur für aktuelle Zeit). Ich sehe jedoch, dass es nicht die Antwort ist, nach der Sie suchen. Wenn Sie keine bessere Idee finden, können Sie dies automatisieren online calculator.
P.S. Ok, streichen Sie den obigen Code aus und versuchen Sie es mit einer anderen "Iteration".
Nur um zu bemerken, dass ich einen Code mit meiner Zeitzone (Bulgarien) kompatibel gemacht habe, wo PDT am letzten Sonntag im März beginnt und am letzten Sonntag im Oktober endet. Dies erlaubt mir, meine PDT-Reichweite einfach einzustellen. Kurz gesagt, besteht die Idee darin, den Algorithmus auf Ihre Region anzuwenden. Der Rest ist klar, hoffe ich.
With New DateDrill
Debug.WriteLine .UTCDate("2008-6-28")
Debug.WriteLine .UTCDate("2014-1-21")
End With
Class DateDrill
Public Function UTCDate(ByVal dtDate)
If Not IsDate(dtDate) Then Err.Raise 5
dtDate = CDate(dtDate)
Dim ZoneBias: ZoneBias = TimeZoneBias()
If IsPDT(Now) <> IsPDT(dtDate) Then
ZoneBias = ZoneBias - 60
End If
UTCDate = DateAdd("n", ZoneBias, dtDate)
End Function
Private Function IsPDT(ByVal dtDate)
If Not IsDate(dtDate) Then Err.Raise 5
dtDate = CDate(dtDate)
Dim pdtLow, pdtUpr, nDaysBack
pdtLow = DateSerial(Year(dtDate), 3, 31)
pdtUpr = DateSerial(Year(dtDate), 10, 31)
pdtLow = DateAdd("h", 2, pdtLow)
pdtUpr = DateAdd("h", 2, pdtUpr)
nDaysBack = Weekday(pdtLow) - 1
If nDaysBack <> 0 Then
pdtLow = DateAdd("d", -nDaysBack, pdtLow)
End If
nDaysBack = Weekday(pdtUpr) - 1
If nDaysBack <> 0 Then
pdtUpr = DateAdd("d", -nDaysBack, pdtUpr)
End If
IsPDT = (dtDate >= pdtLow And dtDate <= pdtUpr)
End Function
Private Function TimeZoneBias()
Dim LTZone
With GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each LTZone In .ExecQuery(_
"Select * From Win32_ComputerSystem")
TimeZoneBias = LTZone.CurrentTimeZone
Next
End With
TimeZoneBias = TimeZoneBias * -1
End Function
End Class
Da Sie Javascript auch serverseitig verwenden können, würde ich vorschlagen, dass Sie javascripts toUTCString() verwenden – AardVark71
Danke @ AardVark71, habe ich nicht an diese Option gedacht. Ich werde einige Unit-Tests machen und sehen, wie es herauskommt, und Sie wissen lassen, wie es sich entwickelt. – GWR
Funktioniert wie ein Charme. Ich werde meine endgültige Lösung in einigen veröffentlichen. – GWR