A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution.
It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years.
Example 1: Compute Duration from two Timestamps in pseudo code.
Timestamp start = ...; Timestamp end = ...; Duration duration = ...; duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos; if (duration.seconds < 0 && duration.nanos > 0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
Timestamp start = ...; Duration duration = ...; Timestamp end = ...; end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos; if (end.nanos < 0) { end.seconds -= 1; end.nanos += 1000000000; } else if (end.nanos >= 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
Example 3: Compute Duration from datetime.timedelta in Python.
td = datetime.timedelta(days=3, minutes=10) duration = Duration() duration.FromTimedelta(td)
Constructors and Destructors |
|
---|---|
Duration()
|
|
Duration(Duration other)
|
Properties |
|
---|---|
Descriptor
|
pbr::MessageDescriptor
|
Descriptor
|
pbr::MessageDescriptor pb::IMessage.
|
Nanos
|
int
Signed fractions of a second at nanosecond resolution of the span of time.
|
Parser
|
pb::MessageParser< Duration >
|
Seconds
|
long
Signed seconds of the span of time.
|
Public attributes |
|
---|---|
MaxSeconds = 315576000000L
|
const long
The maximum permitted number of seconds.
|
MinSeconds = -315576000000L
|
const long
The minimum permitted number of seconds.
|
NanosFieldNumber = 2
|
const int
Field number for the "nanos" field.
|
NanosecondsPerSecond = 1000000000
|
const int
The number of nanoseconds in a second.
|
NanosecondsPerTick = 100
|
const int
The number of nanoseconds in a BCL tick (as used by TimeSpan and DateTime).
|
SecondsFieldNumber = 1
|
const int
Field number for the "seconds" field.
|
Public functions |
|
---|---|
CalculateSize()
|
int
Calculates the size of this message in Protocol Buffer wire format, in bytes.
|
Clone()
|
|
Equals(object other)
|
override bool
|
Equals(Duration other)
|
bool
|
GetHashCode()
|
override int
|
MergeFrom(Duration other)
|
void
|
MergeFrom(pb::CodedInputStream input)
|
void
|
ToDiagnosticString()
|
string
Returns a string representation of this Duration for diagnostic purposes.
|
ToString()
|
override string
|
ToTimeSpan()
|
TimeSpan
Converts this Duration to a TimeSpan.
|
WriteTo(pb::CodedOutputStream output)
|
void
|
Public static functions |
|
---|---|
FromTimeSpan(TimeSpan timeSpan)
|
Converts the given TimeSpan to a Duration.
|
operator+(Duration lhs, Duration rhs)
|
Adds the two specified Duration values together.
|
operator-(Duration value)
|
Returns the result of negating the duration.
|
operator-(Duration lhs, Duration rhs)
|
Subtracts one Duration from another.
|
pbr::MessageDescriptor Descriptor
pbr::MessageDescriptor pb::IMessage. Descriptor
int Nanos
Signed fractions of a second at nanosecond resolution of the span of time.
Durations less than one second are represented with a 0 seconds
field and a positive or negative nanos
field. For durations of one second or more, a non-zero value for the nanos
field must be of the same sign as the seconds
field. Must be from -999,999,999 to +999,999,999 inclusive.
pb::MessageParser< Duration > Parser
long Seconds
Signed seconds of the span of time.
Must be from -315,576,000,000 to +315,576,000,000 inclusive.
const long MaxSeconds = 315576000000L
The maximum permitted number of seconds.
const long MinSeconds = -315576000000L
The minimum permitted number of seconds.
const int NanosecondsPerSecond = 1000000000
The number of nanoseconds in a second.
const int NanosecondsPerTick = 100
The number of nanoseconds in a BCL tick (as used by TimeSpan and DateTime).
int CalculateSize()
Calculates the size of this message in Protocol Buffer wire format, in bytes.
Details | |
---|---|
Returns |
The number of bytes required to write this message to a coded output stream.
|
Duration Clone()
Duration()
Duration( Duration other )
override bool Equals( object other )
bool Equals( Duration other )
override int GetHashCode()
void MergeFrom( Duration other )
void MergeFrom( pb::CodedInputStream input )
string ToDiagnosticString()
Returns a string representation of this Duration for diagnostic purposes.
Normally the returned value will be a JSON string value (including leading and trailing quotes) but when the value is non-normalized or out of range, a JSON object representation will be returned instead, including a warning. This is to avoid exceptions being thrown when trying to diagnose problems - the regular JSON formatter will still throw an exception for non-normalized values.
Details | |
---|---|
Returns |
A string representation of this value.
|
override string ToString()
TimeSpan ToTimeSpan()
Converts this Duration to a TimeSpan.
If the duration is not a precise number of ticks, it is truncated towards 0.
Details | |||
---|---|---|---|
Exceptions |
|
||
Returns |
The value of this duration, as a
TimeSpan . |
void WriteTo( pb::CodedOutputStream output )
Duration FromTimeSpan( TimeSpan timeSpan )
Duration operator+( Duration lhs, Duration rhs )
Adds the two specified Duration values together.
Details | |||||
---|---|---|---|---|---|
Parameters |
|
||||
Returns |