[Tips] Get Server Time using C# DotNet

0
33

If you want to get server time to check something in your application. This tips is for C# developer.
Condition: your applications much connect to internet

Get Server Time using C# DotNet

Check below code!

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;

                      return new DateTime(yr, mo, dy, hr, mm, sc);
                  }
              }
              catch                {
                  /* Do Nothing...try the next server */
              }
          }
          return date;
}

Any feedback leave your comment, we can discuss about it!
Reference for C++ Developer:
https://learn-tech-tips.blogspot.com/2015/08/get-server-time-in-c-plus-plus.html
Zidane