获取当前GMT时间
在C#中是否有方法返回UTC(GMT)时区? 不是基于系统的时间。
基本上我想要得到正确的UTC时间,即使我的系统时间不正确。
而不是打电话
DateTime.Now.ToUniversalTime()
你可以打电话
DateTime.UtcNow
同样的事情,但更短:)文件在这里 。
不是基于系统的时间? 你需要拨打networking时间服务或类似的东西。 你可以编写一个NTP客户端,或者只是截屏世界时钟 ;)
我不相信.NET有一个内置的NTP客户端,但有很多可用的 。
我从联合国使用这个
//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; }
如果我猜测如何获得准确的时间,则必须find/写入一些NNTP类来获取时间服务器的时间。
如果您在Google上searchC#NTP ,您可以find一些实现 ,否则请检查NTP协议。
如果您的系统时间不正确,那么您从DateTime类中获得的任何内容都将无济于事。 您的系统可以与时间服务器同步时间,所以如果打开,各种DateTime UTC方法/属性将返回正确的UTC时间。