Ruslan Demidow писал(а):Ну и я прилеплюсь тогда к этому вопросу (чтобы темы не плодить).
Как узнать какой сейчас период: летний или зимний?
Т.е. перешли уже на зимнее время или на летнее? Нужно для определения смещения времени по часовым поясам.
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32" (ByVal lpTimeZoneInformation As Long) As Long
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
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 As String * 32
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName As String * 32
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Sub Main()
Dim tz As TIME_ZONE_INFORMATION, now As SYSTEMTIME, utc As SYSTEMTIME
GetTimeZoneInformation (VarPtr(tz))
GetLocalTime now
GetSystemTime utc
If (utc.wHour - now.wHour) * 60 + (utc.wMinute - now.wMinute) = tz.Bias + tz.StandardBias Then
Debug.Print tz.StandardName
ElseIf (utc.wHour - now.wHour) * 60 + (utc.wMinute - now.wMinute) = tz.Bias + tz.DaylightBias Then
Debug.Print tz.DaylightName
Else
Debug.Print "Unknown time!"
End If
End Sub
Ruslan Demidow писал(а):Артём, спасибо.
Возник один вопрос: tz.DaylightName возращает строку "Московское время (зима)". Как мне определять это время на системах с разным языком? Перебирать все возможные значения?
И ещё, почему зима? Ведь, если я не проспал, пока ещё летнее время...
Option Explicit
Private Declare Function GetTimeZoneInformation Lib "kernel32" (ByVal lpTimeZoneInformation As Long) As Long
Private Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Public Declare Function SystemTimeToVariantTime Lib "oleaut32" (lpSystemTime As SYSTEMTIME, pvTime As Date) 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 As String * 32
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName As String * 32
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Sub Main()
Dim tz As TIME_ZONE_INFORMATION, utc As SYSTEMTIME, dUTC As Date, diff As Integer
GetTimeZoneInformation (VarPtr(tz))
GetSystemTime utc
SystemTimeToVariantTime utc, dUTC
diff = (dUTC - Now) * 24 * 60
If diff = tz.Bias + tz.StandardBias Then
Debug.Print tz.StandardName
ElseIf diff = tz.Bias + tz.DaylightBias Then
Debug.Print tz.DaylightName
Else
Debug.Print "Unknown time!"
End If
End Sub
Сейчас этот форум просматривают: AhrefsBot и гости: 4