Skip to content

Commit

Permalink
time: add methods to convert duration to microseconds and milliseconds
Browse files Browse the repository at this point in the history
The return values are integers, as opposed to floats, since the fractionals can be derived from multiplying t.Seconds().

Fixes golang#28564
  • Loading branch information
dphan72 committed Mar 14, 2019
1 parent 870cfe6 commit b843ab7
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 5 deletions.
6 changes: 6 additions & 0 deletions src/time/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,12 @@ func fmtInt(buf []byte, v uint64) int {
// Nanoseconds returns the duration as an integer nanosecond count.
func (d Duration) Nanoseconds() int64 { return int64(d) }

// Microseconds returns the duration as an integer microsecond count.
func (d Duration) Microseconds() int64 { return int64(d) / 1e3 }

// Milliseconds returns the duration as an integer millisecond count.
func (d Duration) Milliseconds() int64 { return int64(d) / 1e6 }

// These methods return float64 because the dominant
// use case is for printing a floating point number like 1.5s, and
// a truncation to integer would make them not useful in those cases.
Expand Down
42 changes: 37 additions & 5 deletions src/time/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ var gobTests = []Time{
Date(0, 1, 2, 3, 4, 5, 6, UTC),
Date(7, 8, 9, 10, 11, 12, 13, FixedZone("", 0)),
Unix(81985467080890095, 0x76543210), // Time.sec: 0x0123456789ABCDEF
{}, // nil location
{}, // nil location
Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", 32767*60)),
Date(1, 2, 3, 4, 5, 6, 7, FixedZone("", -32768*60)),
}
Expand Down Expand Up @@ -1021,7 +1021,39 @@ var nsDurationTests = []struct {
func TestDurationNanoseconds(t *testing.T) {
for _, tt := range nsDurationTests {
if got := tt.d.Nanoseconds(); got != tt.want {
t.Errorf("d.Nanoseconds() = %d; want: %d", got, tt.want)
t.Errorf("Duration(%s).Nanoseconds() = %d; want: %d", tt.d, got, tt.want)
}
}
}

var usDurationTests = []struct {
d Duration
want int64
}{
{Duration(-1000), -1},
{Duration(1000), 1},
}

func TestDurationMicroseconds(t *testing.T) {
for _, tt := range usDurationTests {
if got := tt.d.Microseconds(); got != tt.want {
t.Errorf("Duration(%s).Microseconds() = %d; want: %d", tt.d, got, tt.want)
}
}
}

var msDurationTests = []struct {
d Duration
want int64
}{
{Duration(-1000000), -1},
{Duration(1000000), 1},
}

func TestDurationMilliseconds(t *testing.T) {
for _, tt := range msDurationTests {
if got := tt.d.Milliseconds(); got != tt.want {
t.Errorf("Duration(%s).Milliseconds() = %d; want: %d", tt.d, got, tt.want)
}
}
}
Expand All @@ -1036,7 +1068,7 @@ var secDurationTests = []struct {
func TestDurationSeconds(t *testing.T) {
for _, tt := range secDurationTests {
if got := tt.d.Seconds(); got != tt.want {
t.Errorf("d.Seconds() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Seconds() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand All @@ -1055,7 +1087,7 @@ var minDurationTests = []struct {
func TestDurationMinutes(t *testing.T) {
for _, tt := range minDurationTests {
if got := tt.d.Minutes(); got != tt.want {
t.Errorf("d.Minutes() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Minutes() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand All @@ -1074,7 +1106,7 @@ var hourDurationTests = []struct {
func TestDurationHours(t *testing.T) {
for _, tt := range hourDurationTests {
if got := tt.d.Hours(); got != tt.want {
t.Errorf("d.Hours() = %g; want: %g", got, tt.want)
t.Errorf("Duration(%s).Hours() = %g; want: %g", tt.d, got, tt.want)
}
}
}
Expand Down

0 comments on commit b843ab7

Please sign in to comment.