Class Duration (3.15.8)

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".

Inheritance

Object > Duration

Namespace

Google.Protobuf.WellKnownTypes

Assembly

Google.Protobuf.dll

Constructors

Duration()

public Duration()

Duration(Duration)

public Duration(Duration other)
Parameter
NameDescription
otherDuration

Fields

MaxSeconds

public const long MaxSeconds = null

The maximum permitted number of seconds.

Field Value
TypeDescription
Int64

MinSeconds

public const long MinSeconds = null

The minimum permitted number of seconds.

Field Value
TypeDescription
Int64

NanosecondsPerSecond

public const int NanosecondsPerSecond = null

The number of nanoseconds in a second.

Field Value
TypeDescription
Int32

NanosecondsPerTick

public const int NanosecondsPerTick = null

The number of nanoseconds in a BCL tick (as used by and ).

Field Value
TypeDescription
Int32

NanosFieldNumber

public const int NanosFieldNumber = null

Field number for the "nanos" field.

Field Value
TypeDescription
Int32

SecondsFieldNumber

public const int SecondsFieldNumber = null

Field number for the "seconds" field.

Field Value
TypeDescription
Int32

Properties

Descriptor

public static MessageDescriptor Descriptor { get; }
Property Value
TypeDescription
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
TypeDescription
Int32

Parser

public static MessageParser<Duration> Parser { get; }
Property Value
TypeDescription
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
TypeDescription
Int64

Methods

CalculateSize()

public int CalculateSize()
Returns
TypeDescription
Int32

Clone()

public Duration Clone()
Returns
TypeDescription
Duration

Equals(Duration)

public bool Equals(Duration other)
Parameter
NameDescription
otherDuration
Returns
TypeDescription
Boolean

Equals(Object)

public override bool Equals(object other)
Parameter
NameDescription
otherObject
Returns
TypeDescription
Boolean

FromTimeSpan(TimeSpan)

public static Duration FromTimeSpan(TimeSpan timeSpan)

Converts the given to a Duration.

Parameter
NameDescription
timeSpanTimeSpan

The TimeSpan to convert.

Returns
TypeDescription
Duration

The value of the given TimeSpan, as a Duration.

GetHashCode()

public override int GetHashCode()
Returns
TypeDescription
Int32

MergeFrom(CodedInputStream)

public void MergeFrom(CodedInputStream input)
Parameter
NameDescription
inputCodedInputStream

MergeFrom(Duration)

public void MergeFrom(Duration other)
Parameter
NameDescription
otherDuration

ToDiagnosticString()

public string ToDiagnosticString()

Returns a string representation of this Duration for diagnostic purposes.

Returns
TypeDescription
String

A string representation of this value.

Remarks

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
TypeDescription
String

ToTimeSpan()

public TimeSpan ToTimeSpan()

Converts this Duration to a .

Returns
TypeDescription
TimeSpan

The value of this duration, as a TimeSpan.

Remarks

If the duration is not a precise number of ticks, it is truncated towards 0.

WriteTo(CodedOutputStream)

public void WriteTo(CodedOutputStream output)
Parameter
NameDescription
outputCodedOutputStream

Operators

Addition(Duration, Duration)

public static Duration operator +(Duration lhs, Duration rhs)

Adds the two specified Duration values together.

Parameters
NameDescription
lhsDuration

The first value to add. Must not be null.

rhsDuration

The second value to add. Must not be null.

Returns
TypeDescription
Duration

Subtraction(Duration, Duration)

public static Duration operator -(Duration lhs, Duration rhs)

Subtracts one Duration from another.

Parameters
NameDescription
lhsDuration

The duration to subtract from. Must not be null.

rhsDuration

The duration to subtract. Must not be null.

Returns
TypeDescription
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
NameDescription
valueDuration

The duration to negate. Must not be null.

Returns
TypeDescription
Duration

The negated value of this duration.

Explicit Interface Implementations

IBufferMessage.InternalMergeFrom(ref ParseContext)

void IBufferMessage.InternalMergeFrom(ref ParseContext input)
Parameter
NameDescription
inputParseContext

IBufferMessage.InternalWriteTo(ref WriteContext)

void IBufferMessage.InternalWriteTo(ref WriteContext output)
Parameter
NameDescription
outputWriteContext

IMessage.Descriptor

MessageDescriptor IMessage.Descriptor { get; }
Returns
TypeDescription
MessageDescriptor