]> git.r.bdr.sh - rbdr/mobius/blame - hotline/time.go
Improve human readability of account config files
[rbdr/mobius] / hotline / time.go
CommitLineData
29f329ae
JH
1package hotline
2
3import (
4 "encoding/binary"
95159e55 5 "slices"
29f329ae
JH
6 "time"
7)
8
fd740bc4
JH
9type 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 13func 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}