From: baycore Date: Mon, 27 Oct 2025 04:43:32 +0000 (+0000) Subject: time: rewrite IsZero method to use wall and ext fields X-Git-Tag: go1.26rc1~472 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=189f2c08cc769fdc98d28ec536010b6f119e645f;p=gostls13.git time: rewrite IsZero method to use wall and ext fields Using wall and ext fields will be more efficient. Fixes #76001 Change-Id: If2b9f597562e0d0d3f8ab300556fa559926480a0 GitHub-Last-Rev: 4a91948413079047cb6c382ed29844f456f3064d GitHub-Pull-Request: golang/go#76006 Reviewed-on: https://go-review.googlesource.com/c/go/+/713720 Reviewed-by: Ian Lance Taylor LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: David Chase --- diff --git a/src/time/time.go b/src/time/time.go index cf9abc7196..32a1ce4307 100644 --- a/src/time/time.go +++ b/src/time/time.go @@ -260,7 +260,11 @@ func (t *Time) mono() int64 { // IsZero reports whether t represents the zero time instant, // January 1, year 1, 00:00:00 UTC. func (t Time) IsZero() bool { - return t.sec() == 0 && t.nsec() == 0 + // If hasMonotonic is set in t.wall, then the time can't be before 1885, so it can't be the year 1. + // If hasMonotonic is zero, then all the bits in wall other than the nanoseconds field should be 0. + // So if there are no nanoseconds then t.wall == 0, and if there are no seconds then t.ext == 0. + // This is equivalent to t.sec() == 0 && t.nsec() == 0, but is more efficient. + return t.wall == 0 && t.ext == 0 } // After reports whether the time instant t is after u.