Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Получение реального времени из интернета - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Получение реального времени из интернета
Саня Дата: Среда, 08.05.2013, 23:44 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Моя разработка - получаем реальное время из интернета:
[vba]
Код
Option Explicit
Private Const D0 As Date = #1/1/1970#
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(32) As Integer
         StandardDate As SYSTEMTIME
         StandardBias As Long
         DaylightName(32) As Integer
         DaylightDate As SYSTEMTIME
         DaylightBias As Long
End Type
Private Function lGetTimeBias() As Long    ' sys = loc + bias (в секундах)
         Dim TZI As TIME_ZONE_INFORMATION
         GetTimeZoneInformation TZI
         lGetTimeBias = TZI.Bias * 60
End Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

' число секунд с 01.01.1970 0:00:00 [время ЛОКАЛЬНОЕ]
Private Function dGetSeconds() As Double
         Const URL = "http://www.direct-time.ru/track.php?id=time_utc"
         Const bDEBUGMODE As Boolean = 0
         Const DT As Single = 3    ' секунд ожидания ответа

         On Error GoTo ErrHandler

         Dim objReq As Object    ' MSXML.XMLHTTPRequest
         Set objReq = CreateObject("MSXML2.XMLHTTP")

         With objReq
             .Open "GET", URL, True
             .setRequestHeader "If-Modified-Since", "1"
             .Send Null

             Dim tOff As Single: tOff = Timer + DT

             Do
                 If .readyState = 4 Then
                     If .Status = 200 Then Exit Do
                 End If
                 If Timer > tOff Then Err.Raise 999, , "время истекло"
                 DoEvents
             Loop

             ' мс ---> с
             dGetSeconds = Int(CDbl(.responseText) / 1000) - lGetTimeBias
         End With

ErrExit:
         Set objReq = Nothing
         Exit Function

ErrHandler:
         Debug.Print Err.Number; Err.Description
         dGetSeconds = 0
         If bDEBUGMODE Then
             Stop
             Resume
         Else
             Resume ErrExit
         End If
End Function

'==============================================================
Function dteGetNow() As Date
         Dim i As Integer, dSec As Double
         For i = 1 To 3
             dSec = dGetSeconds  ' 3 попытки подключения!
             If dSec > 0 Then
                 dteGetNow = DateAdd("s", dSec, D0)
                 Exit Function
             End If
         Next i
         dteGetNow = Now         ' не получилось, берем системное
End Function
[/vba]
думаю, должно быть интересно многим.
да, еще, просто можно сравнить системное время с истинным
 
Ответить
СообщениеМоя разработка - получаем реальное время из интернета:
[vba]
Код
Option Explicit
Private Const D0 As Date = #1/1/1970#
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(32) As Integer
         StandardDate As SYSTEMTIME
         StandardBias As Long
         DaylightName(32) As Integer
         DaylightDate As SYSTEMTIME
         DaylightBias As Long
End Type
Private Function lGetTimeBias() As Long    ' sys = loc + bias (в секундах)
         Dim TZI As TIME_ZONE_INFORMATION
         GetTimeZoneInformation TZI
         lGetTimeBias = TZI.Bias * 60
End Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

' число секунд с 01.01.1970 0:00:00 [время ЛОКАЛЬНОЕ]
Private Function dGetSeconds() As Double
         Const URL = "http://www.direct-time.ru/track.php?id=time_utc"
         Const bDEBUGMODE As Boolean = 0
         Const DT As Single = 3    ' секунд ожидания ответа

         On Error GoTo ErrHandler

         Dim objReq As Object    ' MSXML.XMLHTTPRequest
         Set objReq = CreateObject("MSXML2.XMLHTTP")

         With objReq
             .Open "GET", URL, True
             .setRequestHeader "If-Modified-Since", "1"
             .Send Null

             Dim tOff As Single: tOff = Timer + DT

             Do
                 If .readyState = 4 Then
                     If .Status = 200 Then Exit Do
                 End If
                 If Timer > tOff Then Err.Raise 999, , "время истекло"
                 DoEvents
             Loop

             ' мс ---> с
             dGetSeconds = Int(CDbl(.responseText) / 1000) - lGetTimeBias
         End With

ErrExit:
         Set objReq = Nothing
         Exit Function

ErrHandler:
         Debug.Print Err.Number; Err.Description
         dGetSeconds = 0
         If bDEBUGMODE Then
             Stop
             Resume
         Else
             Resume ErrExit
         End If
End Function

'==============================================================
Function dteGetNow() As Date
         Dim i As Integer, dSec As Double
         For i = 1 To 3
             dSec = dGetSeconds  ' 3 попытки подключения!
             If dSec > 0 Then
                 dteGetNow = DateAdd("s", dSec, D0)
                 Exit Function
             End If
         Next i
         dteGetNow = Now         ' не получилось, берем системное
End Function
[/vba]
думаю, должно быть интересно многим.
да, еще, просто можно сравнить системное время с истинным

Автор - Саня
Дата добавления - 08.05.2013 в 23:44
Камиль Дата: Четверг, 17.10.2013, 12:07 | Сообщение № 2
Группа: Гости
Подскажите, пожалуйста, как это использовать?
Это через Visual Basic вставлять?
Очень нужно, подскажите, пожалуйста, где копать!
Заранее благодарю!!!
 
Ответить
СообщениеПодскажите, пожалуйста, как это использовать?
Это через Visual Basic вставлять?
Очень нужно, подскажите, пожалуйста, где копать!
Заранее благодарю!!!

Автор - Камиль
Дата добавления - 17.10.2013 в 12:07
Serge_007 Дата: Четверг, 17.10.2013, 12:13 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщениеhttp://www.excelworld.ru/dir/code/vba/excel_macro/9-1-0-12

Автор - Serge_007
Дата добавления - 17.10.2013 в 12:13
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!