public sealed class Duration : object, IMessage<Duration>, IEquatable<Duration>, IDeepCloneable<Duration>, IBufferMessage, ICustomDiagnosticMessage, IMessage
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.
Examples
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 (duration.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)
JSON Mapping
In JSON format, the Duration type is encoded as a string rather than an object, where the string ends in the suffix "s" (indicating seconds) and is preceded by the number of seconds, with nanoseconds expressed as fractional seconds. For example, 3 seconds with 0 nanoseconds should be encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should be expressed in JSON format as "3.000000001s", and 3 seconds and 1 microsecond should be expressed in JSON format as "3.000001s".
Implements
IMessage<Duration>, IEquatable<Duration>, IDeepCloneable<Duration>, IBufferMessage, ICustomDiagnosticMessage, IMessageNamespace
Google.Protobuf.WellKnownTypesAssembly
Google.Protobuf.dll
Constructors
Duration()
public Duration()
Duration(Duration)
public Duration(Duration other)
Parameter | |
---|---|
Name | Description |
other | Duration |
Fields
MaxSeconds
public const long MaxSeconds = null
The maximum permitted number of seconds.
Field Value | |
---|---|
Type | Description |
Int64 |
MinSeconds
public const long MinSeconds = null
The minimum permitted number of seconds.
Field Value | |
---|---|
Type | Description |
Int64 |
NanosecondsPerSecond
public const int NanosecondsPerSecond = null
The number of nanoseconds in a second.
Field Value | |
---|---|
Type | Description |
Int32 |
NanosecondsPerTick
public const int NanosecondsPerTick = null
The number of nanoseconds in a BCL tick (as used by and ).
Field Value | |
---|---|
Type | Description |
Int32 |
NanosFieldNumber
public const int NanosFieldNumber = null
Field number for the "nanos" field.
Field Value | |
---|---|
Type | Description |
Int32 |
SecondsFieldNumber
public const int SecondsFieldNumber = null
Field number for the "seconds" field.
Field Value | |
---|---|
Type | Description |
Int32 |
Properties
Descriptor
public static MessageDescriptor Descriptor { get; }
Property Value | |
---|---|
Type | Description |
MessageDescriptor |
Nanos
public int Nanos { get; set; }
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.
Property Value | |
---|---|
Type | Description |
Int32 |
Parser
public static MessageParser<Duration> Parser { get; }
Property Value | |
---|---|
Type | Description |
MessageParser<Duration> |
Seconds
public long Seconds { get; set; }
Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
Property Value | |
---|---|
Type | Description |
Int64 |
Methods
CalculateSize()
public int CalculateSize()
Returns | |
---|---|
Type | Description |
Int32 |
Clone()
public Duration Clone()
Returns | |
---|---|
Type | Description |
Duration |
Equals(Duration)
public bool Equals(Duration other)
Parameter | |
---|---|
Name | Description |
other | Duration |
Returns | |
---|---|
Type | Description |
Boolean |
Equals(Object)
public override bool Equals(object other)
Parameter | |
---|---|
Name | Description |
other | Object |
Returns | |
---|---|
Type | Description |
Boolean |
FromTimeSpan(TimeSpan)
public static Duration FromTimeSpan(TimeSpan timeSpan)
Converts the given to a Duration.
Parameter | |
---|---|
Name | Description |
timeSpan | TimeSpan The |
Returns | |
---|---|
Type | Description |
Duration | The value of the given |
GetHashCode()
public override int GetHashCode()
Returns | |
---|---|
Type | Description |
Int32 |
MergeFrom(CodedInputStream)
public void MergeFrom(CodedInputStream input)
Parameter | |
---|---|
Name | Description |
input | CodedInputStream |
MergeFrom(Duration)
public void MergeFrom(Duration other)
Parameter | |
---|---|
Name | Description |
other | Duration |
ToDiagnosticString()
public string ToDiagnosticString()
Returns a string representation of this Duration for diagnostic purposes.
Returns | |
---|---|
Type | Description |
String | A string representation of this value. |
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.
ToString()
public override string ToString()
Returns | |
---|---|
Type | Description |
String |
ToTimeSpan()
public TimeSpan ToTimeSpan()
Converts this Duration to a .
Returns | |
---|---|
Type | Description |
TimeSpan | The value of this duration, as a |
If the duration is not a precise number of ticks, it is truncated towards 0.
WriteTo(CodedOutputStream)
public void WriteTo(CodedOutputStream output)
Parameter | |
---|---|
Name | Description |
output | CodedOutputStream |
Operators
Addition(Duration, Duration)
public static Duration operator +(Duration lhs, Duration rhs)
Adds the two specified Duration values together.
Parameters | |
---|---|
Name | Description |
lhs | Duration The first value to add. Must not be null. |
rhs | Duration The second value to add. Must not be null. |
Returns | |
---|---|
Type | Description |
Duration |
Subtraction(Duration, Duration)
public static Duration operator -(Duration lhs, Duration rhs)
Subtracts one Duration from another.
Parameters | |
---|---|
Name | Description |
lhs | Duration The duration to subtract from. Must not be null. |
rhs | Duration The duration to subtract. Must not be null. |
Returns | |
---|---|
Type | Description |
Duration | The difference between the two specified durations. |
UnaryNegation(Duration)
public static Duration operator -(Duration value)
Returns the result of negating the duration. For example, the negation of 5 minutes is -5 minutes.
Parameter | |
---|---|
Name | Description |
value | Duration The duration to negate. Must not be null. |
Returns | |
---|---|
Type | Description |
Duration | The negated value of this duration. |
Explicit Interface Implementations
IBufferMessage.InternalMergeFrom(ref ParseContext)
void IBufferMessage.InternalMergeFrom(ref ParseContext input)
Parameter | |
---|---|
Name | Description |
input | ParseContext |
IBufferMessage.InternalWriteTo(ref WriteContext)
void IBufferMessage.InternalWriteTo(ref WriteContext output)
Parameter | |
---|---|
Name | Description |
output | WriteContext |
IMessage.Descriptor
MessageDescriptor IMessage.Descriptor { get; }
Returns | |
---|---|
Type | Description |
MessageDescriptor |