public static DateTime GetUniformTimeStamp()

in Amazon.KinesisTap.Core/Utility.cs [506:569]


        public static DateTime GetUniformTimeStamp()
        {
            // if a valid unexpired ntp server time is available then just calculate the time based on that. The time expires in 12 hrs.
            if (_baseNTPTime != DateTime.MinValue && _isCorrectNTPTime && _stopwatchForUniformTime.ElapsedMilliseconds < 43200000)
            {
                return _baseNTPTime.AddMilliseconds(_stopwatchForUniformTime.ElapsedMilliseconds);
            }

            DateTime baseNTPServerTime = DateTime.MinValue;
            bool useLastServerTime = false;

            var defaultProvider = new DefaultNetworkStatusProvider(NullLogger.Instance);
            defaultProvider.StartAsync(default).AsTask().GetAwaiter().GetResult();
            var networkstatus = new NetworkStatus(defaultProvider);

            // Query NTP server only if network is available
            if (networkstatus.IsAvailable())
            {
                if (GetElapsedMilliseconds() - _elapsedmsSinceFailure > 60000)
                {
                    if (UniformTime == null)
                        UniformTime = new UniformServerTime();

                    // Get NTP server time.
                    baseNTPServerTime = UniformTime.GetNTPServerTime();

                    if (baseNTPServerTime == DateTime.MinValue)
                    {
                        _elapsedmsSinceFailure = GetElapsedMilliseconds();
                    }
                }
            }

            if (baseNTPServerTime == DateTime.MinValue)
            {
                // Get time based on local system time in case of failure.
                if (_baseNTPTime == DateTime.MinValue || !_isCorrectNTPTime)
                {
                    baseNTPServerTime = DateTime.UtcNow;
                }
                else
                {
                    _isCorrectNTPTime = true;
                    useLastServerTime = true;
                }
            }
            else
            {
                _isCorrectNTPTime = true;
            }

            if (useLastServerTime == false)
            {
                _baseNTPTime = baseNTPServerTime;
                _stopwatchForUniformTime.Stop();
                _stopwatchForUniformTime = Stopwatch.StartNew();
            }
            else
            {
                baseNTPServerTime = _baseNTPTime.AddMilliseconds(_stopwatchForUniformTime.ElapsedMilliseconds);
            }

            return baseNTPServerTime;
        }