public WeatherDay ParseCurrentWeather(String jsonString)
        {
            var json    = JObject.Parse(jsonString);
            var main    = json["main"];
            var weather = json["weather"][0];
            var wind    = json["wind"];

            var result = new WeatherDay()
            {
                Date        = DateTimeOffset.FromUnixTimeSeconds(long.Parse(json["dt"].ToString())).DateTime,
                Temperature = Temperature.FromCelsius(double.Parse(main["temp"].ToString()) / 10),
                Humidity    = RelativeHumidity.FromPercentage(double.Parse(main["humidity"].ToString()) / 100),
                Condition   = OpenWeatherMapConditionParser.Parse(weather["icon"].ToString()),
                Wind        = ParseWind(wind)
            };

            result.ApparentTemperature = ApparentTemperatureCalculator.Calculate(result);
            return(result);
        }
        public List <WeatherDay> ParseForecast(String forecastString)
        {
            var forecast = JsonConvert.DeserializeObject <OwmForecast>(forecastString);
            var result   = new List <WeatherDay>();

            foreach (var day in forecast.list)
            {
                result.Add(new WeatherDay()
                {
                    Date        = DateTimeOffset.FromUnixTimeSeconds(day.dt).DateTime,
                    Condition   = OpenWeatherMapConditionParser.Parse(day.weather[0].icon),
                    Humidity    = RelativeHumidity.FromPercentage(day.main.humidity),
                    Temperature = Temperature.FromCelsius(day.main.temp / 10),
                    Wind        = new Wind()
                    {
                        Direction = DirectionParser.FromDegrees(day.wind.deg),
                        Speed     = Speed.FromKilometersPerHour(day.wind.speed)
                    }
                });
            }

            return(ForecastFilter.Filter(result));
        }