From eb48208599264ba00c7bb5780c217a271fd83e84 Mon Sep 17 00:00:00 2001 From: Takahiro Yaota Date: Sat, 12 Dec 2020 12:22:30 +0900 Subject: [PATCH] time: Time.add (#7262) --- vlib/time/time.v | 13 ++++++++++--- vlib/time/time_test.v | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/vlib/time/time.v b/vlib/time/time.v index 0c1a2baa55..2cc8bf3f76 100644 --- a/vlib/time/time.v +++ b/vlib/time/time.v @@ -171,15 +171,22 @@ pub fn (t Time) unix_time_milli() u64 { return t.unix * 1000 + u64(t.microsecond / 1000) } +// add returns a new time that duration is added +pub fn (t Time) add(d Duration) Time { + microseconds := i64(t.unix) * 1000 * 1000 + t.microsecond + d.microseconds() + unix := microseconds / (1000 * 1000) + micro := microseconds % (1000 * 1000) + return unix2(int(unix), int(micro)) +} + // add_seconds returns a new time struct with an added number of seconds. pub fn (t Time) add_seconds(seconds int) Time { - // TODO Add(d time.Duration) - return unix(int(t.unix + u64(seconds))) + return t.add(seconds * second) } // add_days returns a new time struct with an added number of days. pub fn (t Time) add_days(days int) Time { - return unix(int(t.unix + u64(i64(days) * 3600 * 24))) + return t.add(days * 24 * hour) } // since returns a number of seconds elapsed since a given time. diff --git a/vlib/time/time_test.v b/vlib/time/time_test.v index fd97f1e4b0..77c1c0b7ee 100644 --- a/vlib/time/time_test.v +++ b/vlib/time/time_test.v @@ -153,6 +153,21 @@ fn test_weekday_str() { } } +fn test_add() { + d_seconds := 3 + d_microseconds := 13 + duration := time.Duration(d_seconds * time.second + d_microseconds * time.microsecond) + t1 := time_to_test + t2 := time_to_test.add(duration) + assert t2.second == t1.second + d_seconds + assert t2.microsecond == t1.microsecond + d_microseconds + assert t2.unix == t1.unix + u64(d_seconds) + t3 := time_to_test.add(-duration) + assert t3.second == t1.second - d_seconds + assert t3.microsecond == t1.microsecond - d_microseconds + assert t3.unix == t1.unix - u64(d_seconds) +} + fn test_add_days() { num_of_days := 3 t := time_to_test.add_days(num_of_days)