C# Tip Article
How to get the current date and time from internet?
Problem
How to get the current date and time from internet?
Solution
There are two common solutions:
(1) Use NTP (Network Time Protocol) server
// #1 Use NTP var tcp = new TcpClient("time.nist.gov", 13); string resp; using (var rdr = new StreamReader(tcp.GetStream())) { resp = rdr.ReadToEnd(); } string utc = resp.Substring(7, 17); var dt = DateTimeOffset.ParseExact(utc, yy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
(2) Make HTTP request and parse data.
// #2 Use HTTP static void Main(string[] args) { var dt = GetCurrentTime(); Console.WriteLine(dt); } public static DateTimeOffset? GetCurrentTime() { var sites = new string[] { "https://nist.time.gov", "http://www.microsoft.com", "http://www.google.com" }; foreach (var site in sites) { try { var dt = GetTimeFromSite(site); if (dt != null) { return dt; } } catch { continue; } } return null; } private static DateTimeOffset? GetTimeFromSite(string site) { var req = WebRequest.Create(site); var resp = req.GetResponse(); string currTime = resp.Headers["date"]; var dt = DateTimeOffset.ParseExact(currTime, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture.DateTimeFormat, DateTimeStyles.AssumeUniversal); return dt; }