-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimeHelper.go
65 lines (51 loc) · 1.54 KB
/
timeHelper.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
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
const googleURI = "https://maps.googleapis.com/maps/api/timezone/json?location=%f,%f×tamp=%d&sensor=false"
func RetrieveGoogleTimezone(latitude float64, longitude float64) (googleTimezone *GoogleTimezone, err error) {
//defer func() {
// if r := recover(); r != nil {
// err = fmt.Errorf("%v", r)
// }
//}()
timestamp := time.Now().UTC().Unix()
uri := fmt.Sprintf(googleURI, latitude, longitude, timestamp)
resp, err := http.Get(uri)
defer resp.Body.Close()
if err != nil {
return googleTimezone, err
}
// Convert the response to a byte array
rawDocument, err := ioutil.ReadAll(resp.Body)
if err != nil {
return googleTimezone, err
}
// Unmarshal the response to a GoogleTimezone object
googleTimezone = new(GoogleTimezone)
if err = json.Unmarshal(rawDocument, googleTimezone); err != nil {
return googleTimezone, err
}
if googleTimezone.Status != "OK" {
err = fmt.Errorf("Error : Google Status : %s", googleTimezone.Status)
return googleTimezone, err
}
//if len(GoogleTimezone.TimezoneID) == 0 {
// err = fmt.Errorf("Error : No Timezone Id Provided")
// return googleTimezone, err
//}
googleTimezone.Timestamp = timestamp + int64(googleTimezone.RawOffset)
return googleTimezone, err
}
type GoogleTimezone struct {
DstOffset float64 `json:"dstOffset"`
RawOffset float64 `json:"rawOffset"`
Status string `json:"status"`
TimezoneID string `json:"timeZoneId"`
TimezoneName string `json:"timeZoneName"`
Timestamp int64
}