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); }