Esempio n. 1
0
        static List <DateTime> GetMissingWeatherDatesForNode(WeatherNode node, DateTime startDate, DateTime endDate)
        {
            var latitude  = node.Latitude;
            var longitude = node.Longitude;

            var dailyReports = _session.Get <WeatherDaily>(x => x.Latitude == latitude && x.Longitude == longitude).ToList();


            var missingDates        = new List <DateTime>();
            var isWesternHemisphere = node.Longitude <= 0;
            var tzOffsetMin         = isWesternHemisphere ? -2 : -14;
            var tzOffsetMax         = isWesternHemisphere ? 14 : 2;

            //Or "when is 12:00 AM at this location, relative to UTC?"

            for (DateTime date = startDate.Date; date <= endDate.Date; date = date.AddDays(1))
            {
                var timestamp       = TimeConversion.ConvertToTimestamp(date);
                var tzOffsetMinTime = TimeConversion.ConvertToTimestamp(date.AddHours(tzOffsetMin));
                var tzOffsetMaxTime = TimeConversion.ConvertToTimestamp(date.AddHours(tzOffsetMax));
                if (!dailyReports.Any(x => x.Time >= tzOffsetMinTime && x.Time <= tzOffsetMaxTime))
                {
                    var tzOffsetForDate = TimeConversion.GetTimezoneOffsetFromLocationAndDateInSeconds(timestamp, node.Latitude, node.Longitude);
                    missingDates.Add(date.AddSeconds(-tzOffsetForDate));
                }
            }
            return(missingDates);
        }