Advertisement
bruimafia

Untitled

Oct 19th, 2021
1,335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.42 KB | None | 0 0
  1. // ЗАДАНИЕ 3а
  2. fun main(args: Array<String>) {
  3.     val client = HttpClient.newBuilder().build();
  4.     val request = HttpRequest.newBuilder()
  5.         .uri(URI.create("https://api.openweathermap.org/data/2.5/onecall?lat=59.8944&lon=30.2642&units=metric&exclude=current,minutely,hourly,alerts&lang=ru&appid=f757d9051f5a4383ec2be735e9ccc330"))
  6.         .build();
  7.     val response = client.send(request, HttpResponse.BodyHandlers.ofString());
  8.  
  9.     // Klaxon - библиотека для преобразования gson в объекты
  10.     val result = Klaxon().parse<Answer>(response.body())
  11.  
  12.  
  13.     // ЗАДАНИЕ 1 : нахождение дня с минимальной разницей "ощущаемой" и фактической температуры ночью за ближайшие 5 дней
  14.     val durationNightTemp = mutableMapOf<Long, Double>()
  15.     for (i in 0..4) {
  16.         val date: Long = result?.daily?.get(i)?.dt ?: 0L
  17.         val realTemp: Double = result?.daily?.get(i)?.temp?.night ?: 0.0
  18.         val feelTemp: Double = result?.daily?.get(i)?.feels_like?.night ?: 0.0
  19.         val duration: Double = abs(realTemp - feelTemp)
  20.         durationNightTemp[date] = duration
  21.     }
  22.     val findMin = durationNightTemp.maxByOrNull { it.value }
  23.     // умножаем дату на 1000, так как api возвращает секунды
  24.     println("Дата: ${Date(findMin?.key!! * 1000)}")
  25.     println("Разница между ощущаемой и фактической температуры ночью (градусы Цельсия): ${findMin?.value}")
  26.  
  27.  
  28.     // ЗАДАНИЕ 2 : нахождение максимальной продолжительности светового дня за ближайшие 5 дней
  29.     val daylightHours = mutableMapOf<Long, Long>()
  30.     for (i in 0..4) {
  31.         val date: Long = result?.daily?.get(i)?.dt ?: 0L
  32.         val sunset: Long = result?.daily?.get(i)?.sunset ?: 0L
  33.         val sunrise: Long = result?.daily?.get(i)?.sunrise ?: 0L
  34.         val duration: Long = sunset - sunrise
  35.         daylightHours[date] = duration
  36.     }
  37.     val findMax = daylightHours.maxByOrNull { it.value }
  38.     // умножаем дату на 1000, так как api возвращает секунды
  39.     println("Дата: ${Date(findMax?.key!! * 1000)}")
  40.     println("Продолжительность светового дня (секунды): ${findMax?.value}")
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement