Skip to content

Commit d2a2a36

Browse files
authored
Merge pull request #6 from jmettes/fix-leapsecond
Add test for GPS leap second bondary
2 parents d666812 + c0e508d commit d2a2a36

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

rtcm3/time.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ import (
99
// GPS Epoch Time (TOW)
1010
func DF004(e uint32) time.Time {
1111
now := time.Now().UTC()
12-
sow := now.Truncate(time.Hour*24).AddDate(0, 0, -int(now.Weekday()))
12+
return DF004Time(e, now)
13+
}
14+
15+
func DF004Time(e uint32, start time.Time) time.Time {
16+
start = start.Add(rtcm.GpsLeapSeconds()) // UTC to GPS time
17+
sow := start.Truncate(time.Hour*24).AddDate(0, 0, -int(start.Weekday()))
1318
tow := time.Duration(e) * time.Millisecond
1419
return sow.Add(-(rtcm.GpsLeapSeconds())).Add(tow)
1520
}

rtcm3/time_test.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package rtcm3_test
22

33
import (
4-
"github.com/go-gnss/rtcm/rtcm3"
54
"testing"
65
"time"
6+
7+
"github.com/go-gnss/rtcm"
8+
"github.com/go-gnss/rtcm/rtcm3"
79
)
810

911
func TestDF034(t *testing.T) {
@@ -18,6 +20,24 @@ func TestDF034(t *testing.T) {
1820
}
1921
}
2022

23+
func TestDF004(t *testing.T) {
24+
utcInitialDate := time.Date(2021, 12, 12, 0, 0, 0, 0, time.UTC)
25+
utcDate := utcInitialDate
26+
end := 60 * 60 * 24 * 8 // week + 1 day
27+
for i := 0; i <= end; i++ {
28+
utcDate = utcInitialDate.Add(time.Duration(i) * time.Second)
29+
30+
gpsDate := utcDate.Add(rtcm.GpsLeapSeconds())
31+
sow := gpsDate.Truncate(time.Hour*24).AddDate(0, 0, -int(gpsDate.Weekday()))
32+
e := uint32(gpsDate.Sub(sow).Milliseconds())
33+
34+
latency := utcDate.Sub(rtcm3.DF004Time(e, utcDate)).Milliseconds()
35+
if latency != 0 {
36+
t.Errorf("DF004 time incorrect. Expected %v, got %v (%vms difference)", utcDate, rtcm3.DF004Time(e, utcDate), latency)
37+
}
38+
}
39+
}
40+
2141
func TestDF386(t *testing.T) {
2242
beforeUtcZero := time.Date(2019, 2, 7, 23, 41, 40, 0, time.UTC)
2343
if beforeUtcZero != rtcm3.DF386(9700, beforeUtcZero) {

0 commit comments

Comments
 (0)