Никак.Как заставить @HOUR отображать не локальное а UTC время?
MsgBox(0, '', _Get_UTC_Time())
Func _Get_UTC_Time()
Local $sTimeSource = BinaryToString(InetRead('http://tycho.usno.navy.mil/cgi-bin/timer.pl'))
Return StringRegExpReplace($sTimeSource, '(?si).*?
(.*?) UTC.*', '\1')
EndFunc
Global $SplitData
_Get_UTC_Time()
Func _Get_UTC_Time() ; Время из интернета (Московское)
$URL = 'http://time100.ru/'
$ReadHTML = BinaryToString(InetRead($URL), 4)
$Data = StringRegExp($ReadHTML, '(\d+:\d+:\d+)', 3)
$SplitData = StringSplit($Data[0], ':')
MsgBox(0,"Информация",'Сейчас '&$SplitData[1]&':'&$SplitData[2]&':'&$SplitData[3]&' и всё работает')
EndFunc
$label_1 = GUICtrlCreateLabel(StringFormat('%02d', @HOUR-4), 150, 160, 180, 30, 4096)
ConsoleWrite(_UTC_HOUR() & @LF)
Func _UTC_HOUR()
Local $t_ST = DllStructCreate('word[8]')
DllCall('kernel32.dll', 'none', 'GetSystemTime', 'struct*', $t_ST)
If @error Then Return -1
Return StringFormat('%02d', DllStructGetData($t_ST, 1, 5))
EndFunc ;==>_UTC_HOUR
Не, это что-то не тоmadmasles сказал(а):zergood,
Можно так сделать.Код:ConsoleWrite(_UTC_HOUR() & @LF) Func _UTC_HOUR() Local $t_ST = DllStructCreate('word[8]') DllCall('kernel32.dll', 'none', 'GetSystemTime', 'struct*', $t_ST) If @error Then Return -1 Return StringFormat('%02d', DllStructGetData($t_ST, 1, 5)) EndFunc ;==>_UTC_HOUR
на основе @HOUR
Local $iOffSet = -4, $HOUR = @HOUR + $iOffSet
If $HOUR < 0 Then $HOUR = BitAND($HOUR, 23)
ConsoleWrite(StringFormat('%02d (local hour)\t%02d (UTC hour)\n', @HOUR, $HOUR))
Не минусует почему-то. И час стал 1 значным. вместо 03 прописывается 3madmasles сказал(а):zergood [?]
на основе @HOURРезультат будет абсолютно такой же, как в моем предыдущем посте.Код:$iOffSet = -4 ConsoleWrite(StringFormat('%02d', BitAND(@HOUR + $iOffSet, 23)) & @LF)
ConsoleWrite(_GetUTCHours() & @CRLF)
Func _GetUTCHours()
Local $ret
Local $oSC = ObjCreate("ScriptControl")
If Not IsObj($oSC) Then Return SetError(1, 0, 0)
$oSC.Language = "JavaScript"
$ret = $oSC.Eval("new Date().getUTCHours()")
Return $ret
EndFunc ;==>_GetUTCHours
Local $HOUR, $iOffSet
$iOffSet = _Get_OffSet_HOUR_UTC()
ConsoleWrite('OffSet UTC = ' & $iOffSet & @LF)
For $i = 0 To 23
$HOUR = $i + $iOffSet
If $HOUR < 0 Then $HOUR = BitAND($HOUR, 23)
ConsoleWrite(StringFormat('%02d (local hour)\t%02d (UTC hour)\n', $i, $HOUR))
Next
Func _Get_OffSet_HOUR_UTC()
Local $t_TZ, $a_Res
$t_TZ = DllStructCreate('long;byte[168]')
$a_Res = DllCall('kernel32.dll', 'dword', 'GetTimeZoneInformation', 'struct*', $t_TZ)
If (@error) Or ($a_Res[0] = -1) Then Return SetError(1, 0, '')
Return Int(DllStructGetData($t_TZ, 1) / 60)
EndFunc ;==>_Get_OffSet_HOUR_UTC
А StringFormat() на выходе?
ConsoleWrite(_GetUTCHours() & @CRLF)
Func _GetUTCHours()
Local $ret
Local $oSC = ObjCreate("ScriptControl")
If Not IsObj($oSC) Then Return SetError(1, 0, 0)
$oSC.Language = "JavaScript"
$ret = $oSC.Eval("new Date().getUTCHours()")
$ret = StringFormat("%02d", $ret)
Return $ret
EndFunc ;==>_GetUTCHours
$hour=@HOUR + GMTdiff()
If $hour > 23 Then
$hour -= 24
ElseIf $hour < 0 Then
$hour += 24
endif
MsgBox(0,"GMT time", StringFormat("%02d:%02d:%02d", $hour, @MIN, @SEC) )
Func GMTdiff()
Local $TZI_struct = DllStructCreate("long;wchar[32];word;word;word;word;word;word;word;word;long;wchar[32];word;word;word;word;word;word;word;word;long")
Local $posun = DllCall(@SystemDir & "\kernel32.dll","int","GetTimeZoneInformation","ptr",DllStructGetPtr($TZI_struct))
Local $GMT=DllStructGetData($TZI_struct, 1)
If $posun[0]=2 Then $GMT+=DllStructGetData($TZI_struct, 21)
$TZI_struct = 1
Return Round($GMT/60)
EndFunc
If $hour>24 Then $hour-=24
(StringFormat('%02d', BitAND(@HOUR + $iOffSet, 23)) & @LF)