GetTimeZoneInformation: Unterschied zwischen den Versionen

Aus API-Wiki
Wechseln zu: Navigation, Suche
Zeile 3: Zeile 3:
 
<code vb>Private Declare Function GetTimeZoneInformation Lib "kernel32" ( _
 
<code vb>Private Declare Function GetTimeZoneInformation Lib "kernel32" ( _
 
                         lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
 
                         lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
 +
</code>
 +
 +
== Beispiel ==
 +
<code vb>
 +
Private Declare Function GetTimeZoneInformation Lib "kernel32" ( _
 +
                        lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
 +
 +
Private Type SYSTEMTIME
 +
 +
    wYear As Integer
 +
    wMonth As Integer
 +
    wDayOfWeek As Integer
 +
    wDay As Integer
 +
    wHour As Integer
 +
    wMinute As Integer
 +
    wSecond As Integer
 +
    wMilliseconds As Integer
 +
 +
End Type
 +
 +
Private Type TIME_ZONE_INFORMATION
 +
    Bias As Long
 +
    StandardName(63) As Byte
 +
    StandardDate As SYSTEMTIME
 +
    StandardBias As Long
 +
    DaylightName(63) As Byte
 +
    DaylightDate As SYSTEMTIME
 +
    DaylightBias As Long
 +
End Type
 +
 +
Option Explicit
 +
 +
Private Sub Command1_Click()
 +
 +
    Dim yy As Long
 +
    Dim mm As Long
 +
    Dim dd As Long
 +
    Dim hh As Long
 +
    Dim nn As Long
 +
    Dim ss As Long
 +
    Dim T As String
 +
    Dim D As String
 +
    Dim Sd As Date
 +
    Dim Tdiff1 As Long
 +
    Dim Tdiff2 As Long
 +
    Dim Summertime As Boolean
 +
    Dim Bias As Long
 +
    Dim utcHour As Long
 +
    Dim StartSummer As Date
 +
    Dim StartWinter As Date
 +
   
 +
    Dim tzi As TIME_ZONE_INFORMATION
 +
    Call GetTimeZoneInformation(tzi)
 +
 +
    yy = Year(Now)
 +
    mm = tzi.DaylightDate.wMonth
 +
    dd = tzi.DaylightDate.wDay
 +
    hh = tzi.DaylightDate.wHour
 +
    nn = 0
 +
    ss = 0
 +
   
 +
    T = TimeSerial(hh, nn, ss)
 +
    D = DateSerial(yy, mm, dd)
 +
    StartSummer = CVDate(D & " " & T) ' Anfang der Sommerzeit
 +
    Debug.Print "Start summer time: " & StartSummer  ' Achtung das Datum ist nicht korrekt,
 +
                                                    ' Da Sommerzeit immer am Wochenende das auf
 +
                                                    ' dieses Datum folgt, umgestellt wird.
 +
   
 +
    Tdiff1 = DateDiff("s", StartSummer, Now)
 +
   
 +
    mm = tzi.StandardDate.wMonth
 +
    dd = tzi.StandardDate.wDay
 +
    hh = tzi.StandardDate.wHour
 +
    nn = 0
 +
    ss = 0
 +
   
 +
    T = TimeSerial(hh, nn, ss)
 +
    D = DateSerial(yy, mm, dd)
 +
    StartWinter = CVDate(D & " " & T)  ' Anfang der Winterzeit
 +
    Debug.Print "Start winter time: " & StartWinter
 +
   
 +
    Tdiff2 = DateDiff("s", StartWinter, Now)
 +
   
 +
    If Tdiff1 >= 0 And Tdiff2 < 0 Then
 +
        Summertime = True
 +
    End If
 +
   
 +
    Bias = tzi.Bias
 +
   
 +
    If Summertime = True Then
 +
        Bias = Bias + tzi.DaylightBias
 +
    End If
 +
    Bias = Bias / 60
 +
 +
    utcHour = Hour(Now) + Bias
 +
 +
    Debug.Print "Local Time: " & Now
 +
    Debug.Print "UTC:        " & DateAdd("h", Bias, Now)
 +
   
 +
End Sub
 
</code>
 
</code>
  

Version vom 17. Juli 2008, 11:18 Uhr

Gibt in der Struktur TIME_ZONE_INFORMATION die aktuelle Zeitzoneninformation zurück.

Private Declare Function GetTimeZoneInformation Lib "kernel32" ( _

                        lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

Beispiel

Private Declare Function GetTimeZoneInformation Lib "kernel32" ( _

                        lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

Private Type SYSTEMTIME

   wYear As Integer
   wMonth As Integer
   wDayOfWeek As Integer
   wDay As Integer
   wHour As Integer
   wMinute As Integer
   wSecond As Integer
   wMilliseconds As Integer

End Type

Private Type TIME_ZONE_INFORMATION

   Bias As Long
   StandardName(63) As Byte
   StandardDate As SYSTEMTIME
   StandardBias As Long
   DaylightName(63) As Byte
   DaylightDate As SYSTEMTIME
   DaylightBias As Long

End Type

Option Explicit

Private Sub Command1_Click()

   Dim yy As Long
   Dim mm As Long
   Dim dd As Long
   Dim hh As Long
   Dim nn As Long
   Dim ss As Long
   Dim T As String
   Dim D As String
   Dim Sd As Date
   Dim Tdiff1 As Long
   Dim Tdiff2 As Long
   Dim Summertime As Boolean
   Dim Bias As Long
   Dim utcHour As Long
   Dim StartSummer As Date
   Dim StartWinter As Date
   
   Dim tzi As TIME_ZONE_INFORMATION
   Call GetTimeZoneInformation(tzi)
   yy = Year(Now)
   mm = tzi.DaylightDate.wMonth
   dd = tzi.DaylightDate.wDay
   hh = tzi.DaylightDate.wHour
   nn = 0
   ss = 0
   
   T = TimeSerial(hh, nn, ss)
   D = DateSerial(yy, mm, dd)
   StartSummer = CVDate(D & " " & T) ' Anfang der Sommerzeit
   Debug.Print "Start summer time: " & StartSummer  ' Achtung das Datum ist nicht korrekt,
                                                    ' Da Sommerzeit immer am Wochenende das auf
                                                    ' dieses Datum folgt, umgestellt wird.
   
   Tdiff1 = DateDiff("s", StartSummer, Now)
   
   mm = tzi.StandardDate.wMonth
   dd = tzi.StandardDate.wDay
   hh = tzi.StandardDate.wHour
   nn = 0
   ss = 0
   
   T = TimeSerial(hh, nn, ss)
   D = DateSerial(yy, mm, dd)
   StartWinter = CVDate(D & " " & T)   ' Anfang der Winterzeit
   Debug.Print "Start winter time: " & StartWinter
   
   Tdiff2 = DateDiff("s", StartWinter, Now)
   
   If Tdiff1 >= 0 And Tdiff2 < 0 Then
       Summertime = True
   End If
   
   Bias = tzi.Bias
   
   If Summertime = True Then
       Bias = Bias + tzi.DaylightBias
   End If
   Bias = Bias / 60
   utcHour = Hour(Now) + Bias
   Debug.Print "Local Time: " & Now
   Debug.Print "UTC:        " & DateAdd("h", Bias, Now)
   

End Sub

Quelle

Microsoft MSDN (Englisch)