]>
Commit | Line | Data |
---|---|---|
29f329ae JH |
1 | package hotline |
2 | ||
3 | import ( | |
4 | "encoding/binary" | |
95159e55 | 5 | "slices" |
29f329ae JH |
6 | "time" |
7 | ) | |
8 | ||
fd740bc4 JH |
9 | type Time [8]byte |
10 | ||
11 | // NewTime converts a time.Time to the 8 byte Hotline time format: | |
29f329ae | 12 | // Year (2 bytes), milliseconds (2 bytes) and seconds (4 bytes) |
fd740bc4 | 13 | func NewTime(t time.Time) (b Time) { |
29f329ae JH |
14 | yearBytes := make([]byte, 2) |
15 | secondBytes := make([]byte, 4) | |
16 | ||
17 | // Get a time.Time for January 1st 00:00 from t so we can calculate the difference in seconds from t | |
18 | startOfYear := time.Date(t.Year(), time.January, 1, 0, 0, 0, 0, time.Local) | |
19 | ||
20 | binary.BigEndian.PutUint16(yearBytes, uint16(t.Year())) | |
21 | binary.BigEndian.PutUint32(secondBytes, uint32(t.Sub(startOfYear).Seconds())) | |
22 | ||
95159e55 JH |
23 | return [8]byte(slices.Concat( |
24 | yearBytes, | |
25 | []byte{0, 0}, | |
26 | secondBytes, | |
27 | )) | |
29f329ae | 28 | } |