- //时间函数调用的功能
- public static uint ReverseBytes(uint value)
- {
- return (value & 0x000000FFU) << 24 | (value & 0x0000FF00U) << 8 | (value & 0x00FF0000U) >> 8 | (value & 0xFF000000U) >> 24;
- }
- //获取NTP服务器时间
- public static DateTime GetNTPTime(string NTPServer)
- {
- UInt32 serveurRetour = 0;
- byte[] trame = new byte[48];
- trame[0] = 0x23; // héxadécimal
- Socket sock = null;
- try
- {
- // 创建socket
- sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
- // 连接时间服务器
- IPEndPoint serveur = new IPEndPoint(Dns.GetHostEntry(NTPServer).AddressList[0], 123);
- EndPoint serveurRemote = (EndPoint)serveur;
- //发送数据
- sock.SendTo(trame, serveur);
- sock.ReceiveFrom(trame, ref serveurRemote);
- }
- catch (Exception ex)
- {
- RedError(ex.Message);
- }
- finally
- {
- // 关闭连接
- if (sock != null)
- {
- sock.Shutdown(SocketShutdown.Both);
- sock.Close();
- }
- }
- serveurRetour = BitConverter.ToUInt32(trame, 40);
- serveurRetour = ReverseBytes(serveurRetour);
- DateTime start = new DateTime(1900, 1, 1);
- start = start.AddSeconds(serveurRetour);
- start = start.ToLocalTime();
- return start;
- }
- //该片段来自于http://www.codesnippet.cn/detail/0209201615017.html
来源: http://www.codesnippet.cn/detail/0209201615017.html