Autor Tema: Servidor publico para obtener la Fecha y hora desde Internet  (Leído 5286 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Servidor publico para obtener la Fecha y hora desde Internet
« en: Diciembre 27, 2013, 08:17:03 am »
Tengo la necesidad de conocer la fecha real obtenida desde internet y buscando encontre esto

http://www.foro.vb-mundo.com/f24/servidores-publicos-obtener-fecha-y-hora-7867/

Aca les pego el ejemplo!!

Ami me funciona pero no puedo obtener el año que es fundamental para la fecha !!!

Código: [Seleccionar]
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const scUserAgent = "VB Project"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Public hora_local As String

Sub OnSynchro()

Dim hInternet As Long
Dim hHttp As Long
Dim bRet As Boolean
Dim sBuff As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer, hora, dia, mes, año As String

hInternet = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, _
vbNullString, vbNullString, 0)
If hInternet = 0 Then Debug.Assert (0)

hHttp = InternetOpenUrl(hInternet, "http://tycho.usno.navy.mil/cgi-bin/timer.pl", vbNullString, 0, _
INTERNET_FLAG_RELOAD, 0)

DoEvents
If hHttp = 0 Then MsgBox "No hay conexión a Internet." & Chr(13) & Chr(13) & "Fecha no actualizada.", vbExclamation, "Problema de conexión": Exit Sub

sBuff = vbNullString
bRet = InternetReadFile(hHttp, sBuff, Len(sBuff), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sBuff, lNumberOfBytesRead)
hora_local = Mid(sBuffer, InStr(1, sBuffer, "UTC") - 18, 17)
mes = Mid(hora_local, 1, 3)
dia = Mid(hora_local, 6, 2)
hora = Mid(hora_local, 10)
'año=¿?
End Sub

Private Sub Command1_Click()
OnSynchro
End Sub

Alguien lo prueba y me dice si se podra obtener el año tambien?
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Servidor publico para obtener la Fecha y hora desde Internet
« Respuesta #1 en: Diciembre 29, 2013, 10:35:44 pm »
Primero, el servidor web funciona, asi que el problema es del codigo (probablemente el que "parsea" la fecha).
Segundo, te recomiendo usar NTP, ya que hay muchos servidores (y no dependes de ese solo).
Ej: http://vbnet.mvps.org/index.html?code/network/winsocksynctime.htm, http://planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=42973&lngWId=1, etc.
Tercero, se podria implementar en una clase o modulo, que utilice el CSockMaster de ultima (si es que no queres depender del WinSock.ocx). Los eventos y llamadas son totalmente analogos y no habria ningun problema al usar CSockMaster en vez de Winsock.

Saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion