public static IEnumerable<DagligPuddervarsel> GetDailyPowderData(IEnumerable<DagligPuddervarsel> filteredPowderData) { var today = DateTime.Now; var todayStart = DateTime.Now.AddHours(-(DateTime.Now.Hour + 1)); var todayEnd = DateTime.Now.AddDays(1).AddHours(-(DateTime.Now.Hour + 1)); const int days = 11; var dailyPowderData = new DagligPuddervarsel[days - 1]; for (var i = 1; i < days; i++) { var dayPowderData = filteredPowderData.Where(p => p.From < todayEnd && p.From > todayStart); var totalPowder = dayPowderData.Sum(p => p.Precipitation); var temp = dayPowderData.Average(t => t.Temperature); var puddervarsel = new DagligPuddervarsel(); puddervarsel.Precipitation = totalPowder; puddervarsel.Temperature = Math.Round(temp,1); puddervarsel.MaxTemperature = dayPowderData.Max(t => t.Temperature); puddervarsel.From = today; dailyPowderData[i - 1] = puddervarsel; today = today.AddDays(1); todayStart = todayStart.AddDays(1); todayEnd = todayEnd.AddDays(1); } return dailyPowderData; }
public static IEnumerable<DagligPuddervarsel> GetRelevantPowderData(DagligPuddervarsel[] forecast) { var filteredForecast = forecast.Where(p => p != null && ((p.From.Hour == 12 && p.To.Hour == 18) || (p.From.Hour == 00 && p.To.Hour == 06) || (p.From.Hour == 06 && p.To.Hour == 12) || (p.From.Hour == 18 && p.To.Hour == 00))).OrderBy(q => q.From); var longDate = DateTime.Now.AddDays(3).AddHours(-DateTime.Now.Hour); var longForecast = forecast.Where(p => p != null && p.From > longDate && ((p.From.Hour == 01 && p.To.Hour == 07) || (p.From.Hour == 07 && p.To.Hour == 13) || (p.From.Hour == 13 && p.To.Hour == 19) || (p.From.Hour == 19 && p.To.Hour == 01))).OrderBy(q => q.From); var totalForecast = filteredForecast.Concat(longForecast); return totalForecast; }
public static DagligPuddervarsel Create(IEnumerable<DetailedPowder> detailedPowderList) { if (detailedPowderList == null) return null; var dagligPudder = new DagligPuddervarsel(); dagligPudder.DetailedPowderList = detailedPowderList; dagligPudder.Day = detailedPowderList.FirstOrDefault().From; dagligPudder.Precipitation = detailedPowderList.Sum(t => t.Precipitation); dagligPudder.Powder = detailedPowderList.Sum(periode => periode.Powder); var temp = detailedPowderList.Average(t => t.Temperature); dagligPudder.AverageTemperature = Math.Round(temp, 1); dagligPudder.MaxTemperature = detailedPowderList.Max(t => t.Temperature); return dagligPudder; }
public DagligPuddervarsel[] ProcessResponse(XElement forecastResponse) { var items = forecastResponse.DescendantsAndSelf("time"); var xElements = items as XElement[] ?? items.ToArray(); var powderForecastDays = new DagligPuddervarsel[xElements.Count()]; var i = 0; string temperature = string.Empty; foreach (var xElement in xElements) { var from = XmlHelper.GetAttributeValue("from", xElement); var to = XmlHelper.GetAttributeValue("to", xElement); var precipitation = XmlHelper.GetElementValue("location", "precipitation", "value", xElement); var temp = XmlHelper.GetElementValue("location", "temperature", "value", xElement); if (!string.IsNullOrEmpty(temp)) temperature = temp; if (!string.IsNullOrEmpty(precipitation)) { const string format = "yyyy-MM-ddTHH:mm:ssZ"; var powderForecast = new DagligPuddervarsel(); var ciNo = new CultureInfo("nb-NO"); powderForecast.Precipitation = Convert.ToDecimal((string) precipitation.Replace('.', ','), ciNo); powderForecast.From = DateTime.ParseExact(from, format, ciNo); powderForecast.To = DateTime.ParseExact(to, format, ciNo); if (!string.IsNullOrEmpty(temperature)) powderForecast.Temperature = Math.Round(Convert.ToDecimal((string)temperature.Replace('.', ','), ciNo),1); powderForecastDays[i] = powderForecast; i++; } } return powderForecastDays; }
public DagligPuddervarsel[] ProcessResponse(XElement forecastResponse) { var timeInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); var ciNo = new CultureInfo("nb-NO"); var items = forecastResponse.DescendantsAndSelf("time"); var t = 0; var xElements = items as XElement[] ?? items.ToArray(); var powderForecastDays = new DagligPuddervarsel[12]; var detailedPowderList = new DetailedPowder[4]; var detailedTeller = 0; var i = 0; var lastDay = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time")); var temperatureList = new Dictionary<string, string>(); foreach (var xElement in xElements) { //var fromDateTime = TimeZoneInfo.ConvertTime(DateTime.ParseExact(XmlHelper.GetAttributeValue("from", xElement), Format, ciNo), TimeZoneInfo.Local, timeInfo).ToUniversalTime(); //var toDateTime = TimeZoneInfo.ConvertTime(DateTime.ParseExact(XmlHelper.GetAttributeValue("to", xElement), Format, ciNo), TimeZoneInfo.Local, timeInfo).ToUniversalTime(); var fromDateTime = GetExactDateTime(XmlHelper.GetAttributeValue("from", xElement)); var toDateTime = GetExactDateTime(XmlHelper.GetAttributeValue("to", xElement)); if (IsRelevant(fromDateTime, toDateTime)) { //Ny DagligPuddervarsel if (fromDateTime.Date > lastDay) { powderForecastDays[i] = DagligPuddervarsel.Create(detailedPowderList.Where(p => p != null)); ; detailedPowderList = new DetailedPowder[4]; i++; detailedTeller = 0; lastDay = lastDay.AddDays(1); } var detailedPowder = new DetailedPowder(); var precipitation = XmlHelper.GetElementValue("location", "precipitation", "value", xElement); detailedPowder.Precipitation = Convert.ToDecimal(precipitation.Replace('.', ','), ciNo); //if (!System.Diagnostics.Debugger.IsAttached) //{ // detailedPowder.From = fromDateTime.AddHours(-2); // detailedPowder.To = toDateTime.AddHours(-2); //} //else //{ // detailedPowder.From = fromDateTime; // detailedPowder.To = toDateTime; //} detailedPowder.From = fromDateTime; detailedPowder.To = toDateTime; detailedPowder.Temperature = GetAverageTemp(temperatureList, ciNo); detailedPowder.Powder = detailedPowder.Temperature < 2 ? detailedPowder.Precipitation : 0; temperatureList = new Dictionary<string, string>(); if (detailedTeller < detailedPowderList.Count()) detailedPowderList[detailedTeller] = detailedPowder; detailedTeller++; } var temperature = XmlHelper.GetElementValue("location", "temperature", "value", xElement); if (!string.IsNullOrEmpty(temperature)) { temperatureList.Add(fromDateTime.ToString(), temperature); } } return powderForecastDays; }