blob: 78bcc74bbe340946eda08e11b99217bcc93af100 [file] [log] [blame]
Brian Silverman9c614bc2016-02-15 20:20:02 -05001// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc. All rights reserved.
3// https://developers.google.com/protocol-buffers/
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright
10// notice, this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above
12// copyright notice, this list of conditions and the following disclaimer
13// in the documentation and/or other materials provided with the
14// distribution.
15// * Neither the name of Google Inc. nor the names of its
16// contributors may be used to endorse or promote products derived from
17// this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31syntax = "proto3";
32
33package google.protobuf;
34
35option csharp_namespace = "Google.Protobuf.WellKnownTypes";
36option java_package = "com.google.protobuf";
37option java_outer_classname = "DurationProto";
38option java_multiple_files = true;
39option java_generate_equals_and_hash = true;
40option objc_class_prefix = "GPB";
41
42// A Duration represents a signed, fixed-length span of time represented
43// as a count of seconds and fractions of seconds at nanosecond
44// resolution. It is independent of any calendar and concepts like "day"
45// or "month". It is related to Timestamp in that the difference between
46// two Timestamp values is a Duration and it can be added or subtracted
47// from a Timestamp. Range is approximately +-10,000 years.
48//
49// Example 1: Compute Duration from two Timestamps in pseudo code.
50//
51// Timestamp start = ...;
52// Timestamp end = ...;
53// Duration duration = ...;
54//
55// duration.seconds = end.seconds - start.seconds;
56// duration.nanos = end.nanos - start.nanos;
57//
58// if (duration.seconds < 0 && duration.nanos > 0) {
59// duration.seconds += 1;
60// duration.nanos -= 1000000000;
61// } else if (durations.seconds > 0 && duration.nanos < 0) {
62// duration.seconds -= 1;
63// duration.nanos += 1000000000;
64// }
65//
66// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
67//
68// Timestamp start = ...;
69// Duration duration = ...;
70// Timestamp end = ...;
71//
72// end.seconds = start.seconds + duration.seconds;
73// end.nanos = start.nanos + duration.nanos;
74//
75// if (end.nanos < 0) {
76// end.seconds -= 1;
77// end.nanos += 1000000000;
78// } else if (end.nanos >= 1000000000) {
79// end.seconds += 1;
80// end.nanos -= 1000000000;
81// }
82//
83message Duration {
84
85 // Signed seconds of the span of time. Must be from -315,576,000,000
86 // to +315,576,000,000 inclusive.
87 int64 seconds = 1;
88
89 // Signed fractions of a second at nanosecond resolution of the span
90 // of time. Durations less than one second are represented with a 0
91 // `seconds` field and a positive or negative `nanos` field. For durations
92 // of one second or more, a non-zero value for the `nanos` field must be
93 // of the same sign as the `seconds` field. Must be from -999,999,999
94 // to +999,999,999 inclusive.
95 int32 nanos = 2;
96}