VB: Obtener la hora de un servidor de tiempo.

Resuelto
Anonyme209 Mensajes publicados 761 Estado Miembro -  
cs_Le Pivert Mensajes publicados 8437 Estado Colaborador -
Hola,

Programo en Visual Basic 2010.
Me gustaría poder sincronizar la hora del sistema con la hora de un servidor de tiempo web. Para modificar la hora del sistema, encontré "TimeString = "hh:mm:ss"", pero solo funciona en modo administrador. Y no sé cómo recuperar la hora de un servidor web.

Gracias por su ayuda.

12 respuestas

  1. Anonyme209 Mensajes publicados 761 Estado Miembro 19
     
    Gracias, voy a utilizar el código del proyecto y adaptarlo para mi programa.

    Si no es demasiado pedir, hay tres puntos más que podrían serme útiles:

    - Recuperar la fecha de Internet (debería poder arreglármelas solo)
    - Detectar automáticamente si estamos en horario de verano o en horario de invierno.
    - Modificar la hora del sistema sin iniciar en modo admin (no creo que sea posible, pero pregunto de todos modos)
    Gracias por tu ayuda.
    0
  2. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Para el primer punto, hay que cambiar la dirección:

    dirección = "https://ntp.alapetite.fr/date.txt.php"

    y luego en Private Sub Timer1_Tick:

     Dim s As String = texte 'manipulación de cadenas de caracteres Dim separador As Char = CChar("T") Dim nom() As String nom = s.Split(separador) lbldate.Text = nom(0)


    para el segundo punto, busca en la manipulación de cadenas de caracteres para encontrar el 2

    El tercer punto no lo sé, habrá que hacer una nueva publicación.

    Buena programación

    --
    @+ El Pivert
    0
  3. Anonyme209 Mensajes publicados 761 Estado Miembro 19
     
    Hola,

    Gracias por tu ayuda.

    Sé que modificar el 2 por 1 en la dirección permite mostrar la hora de verano y la hora de invierno a elección.
    Lo que quisiera es detectar automáticamente si es necesario poner un 2 o un 1.
    0
  4. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Hay que mirar en el calendario el paso de la hora de verano a la hora de invierno y viceversa y con la fecha que recuperas en lbldate.Text basta con hacer un If
    El cambio es el 26-10-2014 así que:

     If lbldate.Text = 26/10/2014 Then'habría que ver el formato de la Fecha y corregir si es necesario adress = "http://www.Heure.com/heure-fr.php?timezone=1&size=36" End If 

    No es más complicado que eso

    --
    @+ El Piabe
    0
  5. Anonyme209 Mensajes publicados 761 Estado Miembro 19
     
    Hola,

    Gracias por la respuesta, pero hay un pequeño problema:

    Solo funciona para el cambio a la hora de invierno de 2014.
    Me gustaría que funcionara todo el tiempo.
    (Por ejemplo, ver en el calendario el cambio de hora de verano a hora de invierno directamente en vb)
    0
  6. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Para eso hay que mirar los números de semana, creo que siempre son las mismas semanas: el último domingo de marzo (14) y de octubre (44). Así que hay que hacer una búsqueda para encontrar el número de la semana que se guardará en una variable (masemaine) que se inscribirá al abrir la aplicación. Luego, al abrirla, simplemente hay que hacer:

    Si masemaine = 14 entonces
    cambiamos la hora
    fin si

    Te dejo a ti la tarea de buscar en Google cómo encontrar el número de la semana actual en VB.NET
    Esto cambiará el lunes, luego podemos afinar con las fechas. Tú decides

    --
    @+ El Pivert
    0
  7. Anonyme209 Mensajes publicados 761 Estado Miembro 19
     
    Muchas gracias,
    debería poder arreglármelas con eso.
    0
  8. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    He encontrado una fuente en VB6 para encontrar los días de los cambios de hora. La he adaptado a VB.Net, si te interesa, podrás integrarla en tu programa.

    En un Form pon un Button y 2 Label, aquí está el código con el enlace de la fuente en VB6:

    Option Strict On Public Class Form1 'http://codes-sources.commentcamarche.net/source/24735-calcul-du-decalage-heure-ete-hiver-en-fonction-d-une-date Dim seuilete As Date Dim seuilhiver As Date Dim dteData As Date Dim iddate As String Dim jour As Integer Dim uneDateC As Decimal 'número de días desde el comienzo del año Dim seuileteC As Decimal 'día comienzo del año hora de verano Dim seuilhiverC As Decimal 'día comienzo del año hora de invierno Dim DateS As String Dim DateD As DateTime Dim Annee As String Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'actualización de las fechas dteData = Now 'hoy Annee = (dteData.ToString("yyyy")) 'año en curso 'uneDate = CDate(TextBox1.Text) iddate = "25/03/" & Annee & " 02:00:00" 'es el 25 de marzo del mismo año seuilete = CDate(iddate) jour = Weekday(seuilete, vbMonday) '¿cuántos días antes de alcanzar el próximo domingo? iddate = (32 - jour) & "/03/" & Annee & " 02:00:00" seuilete = CDate(iddate) Label1.Text = "hora de verano: " & Format(seuilete, "dddd d MMM yyyy") '---------------------------------------------------------------------- 'igual pero para la hora de invierno 'es el 25 de octubre del mismo año iddate = "25/10/" & Annee & " 02:00:00" seuilhiver = CDate(iddate) jour = Weekday(seuilhiver, vbMonday) '¿cuántos días antes de alcanzar el próximo domingo? iddate = (32 - jour) & "/10/" & Annee & " 02:00:00" seuilhiver = CDate(iddate) Label2.Text = "hora de invierno: " & Format(seuilhiver, "dddd d MMM yyyy") '-------------------------------------------------------------------- 'una pequeña comparación DateS = ("01/01/" & Annee) 'Ingresar una fecha: obtenemos una cadena DateD = CDate(DateS) 'Conversión de la cadena a DateTime uneDateC = DateDiff(DateInterval.Day, DateD, Now) MsgBox("Hoy " & uneDateC & " días desde el comienzo del año") seuileteC = DateDiff(DateInterval.Day, DateD, seuilete) 'diferencia en días desde el comienzo del año a la hora de verano MsgBox("La hora de verano está a " & seuileteC & " días desde el comienzo del año") seuilhiverC = DateDiff(DateInterval.Day, DateD, seuilhiver) 'diferencia en días hora de invierno al final del año MsgBox("La hora de invierno está a " & seuilhiverC & " días desde el comienzo del año") If (seuileteC < uneDateC) And (uneDateC < seuilhiverC) Then MsgBox("Estamos en hora de verano") Else MsgBox("Estamos en hora de invierno") End If End Sub End Class 


    Buena programación

    --
    @+ El Pivert
    0
  9. Anonyme209 Mensajes publicados 761 Estado Miembro 19
     
    Gracias, tu código es muy útil.
    0