-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata.go
68 lines (54 loc) · 1.36 KB
/
data.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"strconv"
"github.com/relvacode/iso8601"
"time"
)
type WeatherDataPoint struct {
Time string `json:"time"`
forecast string
Temperature float64 `json:"temperature"`
Humidity float64 `json:"humidity"`
Wind float64 `json:"wind"`
Pressure float64 `json:"pressure"`
}
type WeatherData struct {
Area string `json:"area"`
Forecast []WeatherDataPoint `json:"forecast"`
}
func ParseIso(inp string) string {
timestamp, err := iso8601.ParseString(inp)
if err != nil {
return ""
}
hourOffset := 8;
nanoOffset := 1000000000 * 3600 * hourOffset
timestamp = timestamp.Add(time.Duration(nanoOffset))
timestampString := timestamp.Format(time.RFC3339)
return timestampString
}
func CSVWeatherData(CSVData [][]string, area string) WeatherData {
amountOfForecast := len(CSVData) - 1
weatherData := WeatherData{
Area: area,
Forecast: make([]WeatherDataPoint, amountOfForecast),
}
for index, row := range CSVData[1:] {
weatherData.Forecast[amountOfForecast - index - 1] = WeatherDataPoint{
Time: ParseIso(row[0]),
forecast: ParseIso(row[1]),
Temperature: parseFloat(row[2]),
Humidity: parseFloat(row[3]),
Wind: parseFloat(row[4]),
Pressure: parseFloat(row[5]),
}
}
return weatherData;
}
func parseFloat(str string) float64 {
float, err := strconv.ParseFloat(str, 64)
if err != nil {
return -10000
}
return float
}