Array
(
)

Hora certa via internet em CSharp

Ricardo Igreja
   - 01 nov 2013

Olá,
Pessoal, como faço para obter a hora certa via internet para um programa em C# ?
(detalhe, estou no Rio de Janeiro Brasil) Caso precise pegar de algum servidor de fora, ainda posso recorrer a conversão de fuso horário.
Desde já agradeço
Ricardo
[]

Ricardo Igreja
   - 01 nov 2013

Pessoal,

encontrei um que pega hora de um servidor americano.
Fiz uma compensacao de fuso retornando: #Código

return dateTime.AddHours(-2).AddSeconds(1);


Código Original:

#Código
public static DateTime GetNistTime()
{
    DateTime dateTime = DateTime.MinValue;

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://nist.time.gov/timezone.cgi?UTC/s/0");
    request.Method = "GET";
    request.Accept = "text/html, application/xhtml+xml, */*";
    request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
    request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); //No caching
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    {
        StreamReader stream = new StreamReader(response.GetResponseStream());
        string html = stream.ReadToEnd().ToUpper();
        string time = Regex.Match(html, @">\d+:\d+:\d+<").Value; //HH:mm:ss format
        string date = Regex.Match(html, @">\w+,\s\w+\s\d+,\s\d+<").Value; //dddd, MMMM dd, yyyy
        dateTime = DateTime.Parse((date + " " + time).Replace(">", "").Replace("<", ""));
    }

    return dateTime;
}


Classe criada:

#Código
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Text.RegularExpressions;


namespace EletronicWorkFlow
{
    public static class DtOnline
    {
        public static DateTime horaCerta = GetNetworkTime();

        public static void AtualizaSegundo()
        {
            horaCerta = horaCerta.AddSeconds(1);
        }

        public static DateTime getDateTime()
        {
            return horaCerta;
        }

        public static DateTime GetNetworkTime()
        {
            DateTime dateTime = DateTime.MinValue;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://nist.time.gov/timezone.cgi?UTC/s/0");
            request.Method = "GET";
            request.Accept = "text/html, application/xhtml+xml, */*";
            request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
            request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); //No caching
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                StreamReader stream = new StreamReader(response.GetResponseStream());
                string html = stream.ReadToEnd().ToUpper();
                string time = Regex.Match(html, @">\d+:\d+:\d+<").Value; //HH:mm:ss format
                string date = Regex.Match(html, @">\w+,\s\w+\s\d+,\s\d+<").Value; //dddd, MMMM dd, yyyy
                dateTime = DateTime.Parse((date + " " + time).Replace(">", "").Replace("<", ""));
            }

            return dateTime.AddHours(-2).AddSeconds(1);
        }

    }
}

Dvm.lc.ledcrash
   - 12 nov 2013

Caso você queira acertar os ponteiros com nosso servidor de tempo oficial no Brasil, veja no link abaixo o endereço IP e as portas para consulta. É público.

http://pcdsh01.on.br/SincronismoPublico.html