zulu zona significado reloj que horaria hora greenwich aviacion atlantica analogico actual c# .net timezone utc ntp

c# - zona - reloj analogico hora actual



Obteniendo la hora GMT actual (5)

¿No basado en el tiempo del sistema? Tendrá que hacer una llamada a un servicio horario de red o algo similar. Puede escribir un cliente NTP , o simplemente screencrape World Clock ;)

No creo que .NET tenga un cliente NTP incorporado, pero hay bastantes disponibles .

¿Hay algún método en C # que devuelva la zona horaria UTC (GMT)? No basado en el tiempo del sistema.

Básicamente quiero obtener la hora UTC correcta, incluso si la hora de mi sistema no es correcta.


Si la hora de su sistema no es correcta, nada de lo que obtenga de la clase DateTime lo ayudará. Sin embargo, su sistema puede sincronizar la hora con los servidores de tiempo, por lo que si está activada, los diversos métodos / propiedades de DateTime UTC devolverán la hora UTC correcta.


Si tuviera que apostar a cómo obtener un tiempo exacto garantizado, tendrías que buscar / escribir alguna clase NNTP para obtener el tiempo libre de un servidor horario.

Si busca C # NTP en google, puede encontrar algunas implementaciones ; de lo contrario, verifique el protocolo NTP .


En lugar de llamar

DateTime.Now.ToUniversalTime()

Puedes llamar

DateTime.UtcNow

Lo mismo pero más corto :) Documentación aquí .


Yo uso esto de UNITY

//Get a NTP time from NIST //do not request a nist date more than once every 4 seconds, or the connection will be refused. //more servers at tf.nist.goc/tf-cgi/servers.cgi public static DateTime GetDummyDate() { return new DateTime(1000, 1, 1); //to check if we have an online date or not. } public static DateTime GetNISTDate() { Random ran = new Random(DateTime.Now.Millisecond); DateTime date = GetDummyDate(); string serverResponse = string.Empty; // Represents the list of NIST servers string[] servers = new string[] { "nist1-ny.ustiming.org", "time-a.nist.gov", "nist1-chi.ustiming.org", "time.nist.gov", "ntp-nist.ldsbc.edu", "nist1-la.ustiming.org" }; // Try each server in random order to avoid blocked requests due to too frequent request for (int i = 0; i < 5; i++) { try { // Open a StreamReader to a random time server StreamReader reader = new StreamReader(new System.Net.Sockets.TcpClient(servers[ran.Next(0, servers.Length)], 13).GetStream()); serverResponse = reader.ReadToEnd(); reader.Close(); // Check to see that the signature is there if (serverResponse.Length > 47 && serverResponse.Substring(38, 9).Equals("UTC(NIST)")) { // Parse the date int jd = int.Parse(serverResponse.Substring(1, 5)); int yr = int.Parse(serverResponse.Substring(7, 2)); int mo = int.Parse(serverResponse.Substring(10, 2)); int dy = int.Parse(serverResponse.Substring(13, 2)); int hr = int.Parse(serverResponse.Substring(16, 2)); int mm = int.Parse(serverResponse.Substring(19, 2)); int sc = int.Parse(serverResponse.Substring(22, 2)); if (jd > 51544) yr += 2000; else yr += 1999; date = new DateTime(yr, mo, dy, hr, mm, sc); // Exit the loop break; } } catch (Exception ex) { /* Do Nothing...try the next server */ } } return date; }