blob: 78bcc74bbe340946eda08e11b99217bcc93af100 [file] [log] [blame]
Feng Xiao96e379f2015-02-09 12:21:49 +08001// 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.
Feng Xiaoe841bac2015-12-11 17:09:20 -080030
Feng Xiao96e379f2015-02-09 12:21:49 +080031syntax = "proto3";
32
33package google.protobuf;
34
Jon Skeet739d13d2015-07-14 14:26:31 +010035option csharp_namespace = "Google.Protobuf.WellKnownTypes";
Feng Xiaoe841bac2015-12-11 17:09:20 -080036option java_package = "com.google.protobuf";
37option java_outer_classname = "DurationProto";
38option java_multiple_files = true;
39option java_generate_equals_and_hash = true;
Thomas Van Lentenffa2e372015-05-18 12:48:21 -040040option objc_class_prefix = "GPB";
Feng Xiao96e379f2015-02-09 12:21:49 +080041
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//
Feng Xiaoca9d1a02015-04-20 11:30:31 -070049// Example 1: Compute Duration from two Timestamps in pseudo code.
Feng Xiao96e379f2015-02-09 12:21:49 +080050//
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//
Feng Xiaoca9d1a02015-04-20 11:30:31 -070066// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
Feng Xiao96e379f2015-02-09 12:21:49 +080067//
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 {
Jisi Liub0f66112015-08-21 11:18:45 -070084
Feng Xiao96e379f2015-02-09 12:21:49 +080085 // 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
Feng Xiaoca9d1a02015-04-20 11:30:31 -070091 // `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
Feng Xiao96e379f2015-02-09 12:21:49 +080094 // to +999,999,999 inclusive.
95 int32 nanos = 2;
96}