恭喜,你发布的帖子
发布于 2022-11-07 12:51:11
17楼
Private BiasTime As Long
Private StandardTimeBias As Long
Private PrevNow As Date
Private Const DayLightTimeSavingGap = (50 * 60) / 86400 'mininum 50 minute gap
Private Const OneHour = 60 * 60 '3600 seconds
Public Function DelaySeconds(Delay As Single)
Dim Start As Single
Start = Timer
If Start + Delay > 86400 Then
Do Until Timer < Start
DoEvents
Loop
Delay = Start + Delay - 86400
Start = 0
End If
Do Until Timer > Start + Delay
DoEvents
Loop
End Function
'10/18/2011-CC Fix the daylight time saving issue
'SysTime returns date in GMT time zone instead of local time zone
Public Function SysTime() As Date
Dim t As SYSTEMTIME
Dim bias As Long
Dim x As Date
If (CDbl(Now) - CDbl(PrevNow) > DayLightTimeSavingGap) And (BiasTime = StandardTimeBias) Then
'Currnet time transits from Standard time zone to DayLightTimeSavingZone
BiasTime = mDayLightTimeBias.GetTimeZoneBias
ElseIf (CDbl(PrevNow) - CDbl(Now) > DayLightTimeSavingGap) And (BiasTime <> StandardTimeBias) Then
'Current Time transits from DayLightTimeSaving zone to Standard time zone
BiasTime = mDayLightTimeBias.GetTimeZoneBias
End If
PrevNow = Now
SysTime = CDate(CDbl(Date) + (BiasTime + Timer) / 86400)
End Function
Public Sub Init_DaylightTimeSaving_BiasTime()
PrevNow = Now
BiasTime = mDayLightTimeBias.GetTimeZoneBias
StandardTimeBias = mDayLightTimeBias.GetStandardTimeBias
End Sub
'10/18/2011-CC Fix the daylight time saving issue
'SysTime returns date in GMT time zone instead of local time zone
Public Function SysTime_1() As Date
Dim t As SYSTEMTIME
Dim bias As Long
Dim x As Date
x = LocalTime
GetSystemTime t
SysTime_1 = DateSerial(t.wYear, t.wMonth, t.wDay) + TimeSerial(t.wHour, t.wMinute, t.wSecond) + t.wMilliseconds / 86400000#
' Debug.Print "UTC duration", ElapsedSeconds_LocalTime(x)
End Function
'10/18/2011-CC Fix the daylight time saving issue
'LocalTime returns date format in local time zone
Public Function LocalTime() As Date
Dim t As SYSTEMTIME
LocalTime = CDate(CDbl(Date) + Timer / 86400)
End Function
Public Function ElapsedSeconds_LocalTime(DT As Date) As Double
ElapsedSeconds_LocalTime = Abs((CDbl(Date) + Timer / 86400 - CDbl(DT)) * 86400)
End Function
Public Function ElapsedSeconds(DT As Date) As Double
If (CDbl(Now) - CDbl(PrevNow) > DayLightTimeSavingGap) And (BiasTime = StandardTimeBias) Then
'Currnet time transits from Standard time zone to DayLightTimeSavingZone
BiasTime = mDayLightTimeBias.GetTimeZoneBias
ElseIf (CDbl(PrevNow) - CDbl(Now) > DayLightTimeSavingGap) And (BiasTime <> StandardTimeBias) Then
'Current Time transits from DayLightTimeSaving zone to Standard time zone
BiasTime = mDayLightTimeBias.GetTimeZoneBias
End If
PrevNow = Now
ElapsedSeconds = Abs((CDbl(Date) + (BiasTime + Timer) / 86400 - CDbl(DT)) * 86400)
End Function
'10/18/2011-CC Fix the daylight time saving issue
'ElapsedSeconds returns seconds difference between DT and current time
'DT is in GMT time zone
Public Function ElapsedSeconds_1(DT As Date) As Double
Dim x As Date
Dim y As Date
x = LocalTime
y = SysTime
' Debug.Print "ElapsedSecond Duration 1", ElapsedSeconds_LocalTime(x)
ElapsedSeconds_1 = Abs(CDbl(y) - CDbl(DT)) * 86400
' Debug.Print "ElapsedSecond Duration 2", ElapsedSeconds_1
End Function
别人写的一段程序,可以参考一下。
请填写推广理由:
分享
只看
楼主