Public Function ConvertTimeToLocal(
ByVal dtTime
As Date,
ByVal sZone
As String)
As Date
Dim tzi
As TIME_ZONE_INFORMATION
Dim tz
As TIME_ZONE
Dim lGmtOff
As Long
Dim lBias
As Long
tz = GetTimeZoneInformation(tzi)
lBias = tzi.Bias
If tz = TIME_ZONE_DAYLIGHT
Then lBias = lBias – 60
Select Case UCase(sZone)
Case "EDT"
lGmtOff = -4
Case "EST",
"CDT"
lGmtOff = -5
Case "CST",
"MDT"
lGmtOff = -6
Case "MST",
"PDT"
lGmtOff = -7
Case "PST"
lGmtOff = -8
Case vbNullString
lGmtOff = -tzi.Bias / 60
If tz = TIME_ZONE_DAYLIGHT
Then lGmtOff = lGmtOff + 1
End Select
ConvertTimeToLocal = dtTime + (TimeSerial(0, lBias, 0) + TimeSerial(lGmtOff, 0, 0))
End Function
Public Sub Test_ConvertTimeToLocal()
Dim dtTestTime As Date
dtTestTime = TimeSerial(9, 46, 13)
Debug.Assert (ConvertTimeToLocal(dtTestTime, vbNullString) – dtTestTime) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "CDT") – dtTestTime) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "EST") – dtTestTime) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "EDT") – (dtTestTime + TimeSerial(1, 0, 0))) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "CST") – (dtTestTime – TimeSerial(1, 0, 0))) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "MDT") – (dtTestTime – TimeSerial(1, 0, 0))) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "MST") – (dtTestTime – TimeSerial(2, 0, 0))) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "PDT") – (dtTestTime – TimeSerial(2, 0, 0))) < TimeSerial(0, 0, 1)
Debug.Assert (ConvertTimeToLocal(dtTestTime, "PST") – (dtTestTime – TimeSerial(3, 0, 0))) < TimeSerial(0, 0, 1)
End Sub