Source File
timestamp.go
Belonging Package
github.com/gogo/protobuf/proto
// Go support for Protocol Buffers - Google's data interchange format//// Copyright 2016 The Go Authors. All rights reserved.// https://github.com/golang/protobuf//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met://// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// * Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following disclaimer// in the documentation and/or other materials provided with the// distribution.// * Neither the name of Google Inc. nor the names of its// contributors may be used to endorse or promote products derived from// this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.package proto// This file implements operations on google.protobuf.Timestamp.import ()const (// Seconds field of the earliest valid Timestamp.// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().minValidSeconds = -62135596800// Seconds field just after the latest valid Timestamp.// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().maxValidSeconds = 253402300800)// validateTimestamp determines whether a Timestamp is valid.// A valid timestamp represents a time in the range// [0001-01-01, 10000-01-01) and has a Nanos field// in the range [0, 1e9).//// If the Timestamp is valid, validateTimestamp returns nil.// Otherwise, it returns an error that describes// the problem.//// Every valid Timestamp can be represented by a time.Time, but the converse is not true.func validateTimestamp( *timestamp) error {if == nil {return errors.New("timestamp: nil Timestamp")}if .Seconds < minValidSeconds {return fmt.Errorf("timestamp: %#v before 0001-01-01", )}if .Seconds >= maxValidSeconds {return fmt.Errorf("timestamp: %#v after 10000-01-01", )}if .Nanos < 0 || .Nanos >= 1e9 {return fmt.Errorf("timestamp: %#v: nanos not in range [0, 1e9)", )}return nil}// TimestampFromProto converts a google.protobuf.Timestamp proto to a time.Time.// It returns an error if the argument is invalid.//// Unlike most Go functions, if Timestamp returns an error, the first return value// is not the zero time.Time. Instead, it is the value obtained from the// time.Unix function when passed the contents of the Timestamp, in the UTC// locale. This may or may not be a meaningful time; many invalid Timestamps// do map to valid time.Times.//// A nil Timestamp returns an error. The first return value in that case is// undefined.func timestampFromProto( *timestamp) (time.Time, error) {// Don't return the zero value on error, because corresponds to a valid// timestamp. Instead return whatever time.Unix gives us.var time.Timeif == nil {= time.Unix(0, 0).UTC() // treat nil like the empty Timestamp} else {= time.Unix(.Seconds, int64(.Nanos)).UTC()}return , validateTimestamp()}// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.// It returns an error if the resulting Timestamp is invalid.func timestampProto( time.Time) (*timestamp, error) {:= .Unix():= int32(.Sub(time.Unix(, 0))):= ×tamp{Seconds: ,Nanos: ,}if := validateTimestamp(); != nil {return nil,}return , nil}
![]() |
The pages are generated with Golds v0.8.2. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |