Noda Time
Show / Hide Table of Contents

Struct Instant

Represents an instant on the global timeline, with nanosecond resolution.
Implements
IEquatable<Instant>
IComparable<Instant>
IFormattable
IComparable
IXmlSerializable
ISerializable
Inherited Members
Object.Equals(Object, Object)
Object.ReferenceEquals(Object, Object)
Object.GetType()
Namespace: NodaTime
Assembly: NodaTime.dll
Syntax
[Serializable]
public struct Instant : IEquatable<Instant>, IComparable<Instant>, IFormattable, IComparable, IXmlSerializable, ISerializable
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Properties

MaxValue

Represents the largest possible Instant.
Declaration
public static Instant MaxValue { get; }
Property Value
Type Description
Instant
Remarks
This value is equivalent to 9999-12-31T23:59:59.999999999Z

MinValue

Represents the smallest possible Instant.
Declaration
public static Instant MinValue { get; }
Property Value
Type Description
Instant
Remarks
This value is equivalent to -9998-01-01T00:00:00Z

Methods

Add(Instant, Duration)

Adds a duration to an instant. Friendly alternative to operator+().
Declaration
public static Instant Add(Instant left, Duration right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Duration right The right hand side of the operator.
Returns
Type Description
Instant A new Instant representing the sum of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

CompareTo(Instant)

Compares the current object with another object of the same type.
Declaration
public int CompareTo(Instant other)
Parameters
Type Name Description
Instant other An object to compare with this object.
Returns
Type Description
Int32 A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings:
ValueMeaning
< 0This object is less than the other parameter.
0This object is equal to other.
> 0This object is greater than other.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Equals(Instant)

Indicates whether the value of this instant is equal to the value of the specified instant.
Declaration
public bool Equals(Instant other)
Parameters
Type Name Description
Instant other The value to compare with this instance.
Returns
Type Description
Boolean true if the value of this instant is equal to the value of the other parameter; otherwise, false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Equals(Object)

Determines whether the specified Object is equal to this instance.
Declaration
public override bool Equals(object obj)
Parameters
Type Name Description
Object obj The Object to compare with this instance.
Returns
Type Description
Boolean true if the specified Object is equal to this instance; otherwise, false.
Overrides
ValueType.Equals(Object)
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

FromDateTimeOffset(DateTimeOffset)

Converts a DateTimeOffset into a new Instant representing the same instant in time. Note that the offset information is not preserved in the returned Instant.
Declaration
public static Instant FromDateTimeOffset(DateTimeOffset dateTimeOffset)
Parameters
Type Name Description
DateTimeOffset dateTimeOffset Date and time value with an offset.
Returns
Type Description
Instant An Instant value representing the same instant in time as the given DateTimeOffset.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

FromDateTimeUtc(DateTime)

Converts a DateTime into a new Instant representing the same instant in time.
Declaration
public static Instant FromDateTimeUtc(DateTime dateTime)
Parameters
Type Name Description
DateTime dateTime Date and time value which must have a Kind of Utc
Returns
Type Description
Instant An Instant value representing the same instant in time as the given universal DateTime.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentException dateTime is not of Kind Utc.

FromJulianDate(Double)

Converts a Julian Date representing the given number of days since JulianEpoch (noon on January 1st, 4713 BCE in the Julian calendar) into an Instant.
Declaration
public static Instant FromJulianDate(double julianDate)
Parameters
Type Name Description
Double julianDate The number of days since the Julian Epoch to convert into an Instant.
Returns
Type Description
Instant An Instant value which is julianDate days after the Julian Epoch.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

FromUnixTimeMilliseconds(Int64)

Initializes a new instance of the Instant struct based on a number of milliseconds since the Unix epoch of (ISO) January 1st 1970, midnight, UTC.
Declaration
public static Instant FromUnixTimeMilliseconds(long milliseconds)
Parameters
Type Name Description
Int64 milliseconds Number of milliseconds since the Unix epoch. May be negative (for instants before the epoch).
Returns
Type Description
Instant An Instant at exactly the given number of milliseconds since the Unix epoch.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentOutOfRangeException The constructed instant would be out of the range representable in Noda Time.

FromUnixTimeSeconds(Int64)

Initializes a new instance of the Instant struct based on a number of seconds since the Unix epoch of (ISO) January 1st 1970, midnight, UTC.
Declaration
public static Instant FromUnixTimeSeconds(long seconds)
Parameters
Type Name Description
Int64 seconds Number of seconds since the Unix epoch. May be negative (for instants before the epoch).
Returns
Type Description
Instant An Instant at exactly the given number of seconds since the Unix epoch.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentOutOfRangeException The constructed instant would be out of the range representable in Noda Time.

FromUnixTimeTicks(Int64)

Initializes a new instance of the Instant struct based on a number of ticks since the Unix epoch of (ISO) January 1st 1970, midnight, UTC.
Declaration
public static Instant FromUnixTimeTicks(long ticks)
Parameters
Type Name Description
Int64 ticks Number of ticks since the Unix epoch. May be negative (for instants before the epoch).
Returns
Type Description
Instant An Instant at exactly the given number of ticks since the Unix epoch.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

FromUtc(Int32, Int32, Int32, Int32, Int32)

Returns a new instant corresponding to the given UTC date and time in the ISO calendar. In most cases applications should use ZonedDateTime to represent a date and time, but this method is useful in some situations where an Instant is required, such as time zone testing.
Declaration
public static Instant FromUtc(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour)
Parameters
Type Name Description
Int32 year The year. This is the "absolute year", so a value of 0 means 1 BC, for example.
Int32 monthOfYear The month of year.
Int32 dayOfMonth The day of month.
Int32 hourOfDay The hour.
Int32 minuteOfHour The minute.
Returns
Type Description
Instant An Instant value representing the given date and time in UTC and the ISO calendar.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

FromUtc(Int32, Int32, Int32, Int32, Int32, Int32)

Returns a new instant corresponding to the given UTC date and time in the ISO calendar. In most cases applications should use ZonedDateTime to represent a date and time, but this method is useful in some situations where an Instant is required, such as time zone testing.
Declaration
public static Instant FromUtc(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute)
Parameters
Type Name Description
Int32 year The year. This is the "absolute year", so a value of 0 means 1 BC, for example.
Int32 monthOfYear The month of year.
Int32 dayOfMonth The day of month.
Int32 hourOfDay The hour.
Int32 minuteOfHour The minute.
Int32 secondOfMinute The second.
Returns
Type Description
Instant An Instant value representing the given date and time in UTC and the ISO calendar.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

GetHashCode()

Returns a hash code for this instance.
Declaration
public override int GetHashCode()
Returns
Type Description
Int32 A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
Overrides
ValueType.GetHashCode()
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

InUtc()

Returns the ZonedDateTime representing the same point in time as this instant, in the UTC time zone and ISO-8601 calendar. This is a shortcut for calling InZone(DateTimeZone) with an argument of Utc.
Declaration
public ZonedDateTime InUtc()
Returns
Type Description
ZonedDateTime A ZonedDateTime for the same instant, in the UTC time zone and the ISO-8601 calendar
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

InZone(DateTimeZone)

Returns the ZonedDateTime representing the same point in time as this instant, in the specified time zone and ISO-8601 calendar.
Declaration
public ZonedDateTime InZone(DateTimeZone zone)
Parameters
Type Name Description
DateTimeZone zone The time zone in which to represent this instant.
Returns
Type Description
ZonedDateTime A ZonedDateTime for the same instant, in the given time zone and the ISO-8601 calendar
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException zone is null.

InZone(DateTimeZone, CalendarSystem)

Returns the ZonedDateTime representing the same point in time as this instant, in the specified time zone and calendar system.
Declaration
public ZonedDateTime InZone(DateTimeZone zone, CalendarSystem calendar)
Parameters
Type Name Description
DateTimeZone zone The time zone in which to represent this instant.
CalendarSystem calendar The calendar system in which to represent this instant.
Returns
Type Description
ZonedDateTime A ZonedDateTime for the same instant, in the given time zone and calendar
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException zone or calendar is null

Max(Instant, Instant)

Returns the later instant of the given two.
Declaration
public static Instant Max(Instant x, Instant y)
Parameters
Type Name Description
Instant x The first instant to compare.
Instant y The second instant to compare.
Returns
Type Description
Instant The later instant of x or y.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Min(Instant, Instant)

Returns the earlier instant of the given two.
Declaration
public static Instant Min(Instant x, Instant y)
Parameters
Type Name Description
Instant x The first instant to compare.
Instant y The second instant to compare.
Returns
Type Description
Instant The earlier instant of x or y.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Minus(Duration)

Returns the result of subtracting a duration from this instant, for a fluent alternative to operator-().
Declaration
public Instant Minus(Duration duration)
Parameters
Type Name Description
Duration duration The duration to subtract
Returns
Type Description
Instant A new Instant representing the result of the subtraction.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Minus(Instant)

Returns the result of subtracting another instant from this one, for a fluent alternative to operator-().
Declaration
public Duration Minus(Instant other)
Parameters
Type Name Description
Instant other The other instant to subtract
Returns
Type Description
Duration A new Instant representing the result of the subtraction.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Plus(Duration)

Returns the result of adding a duration to this instant, for a fluent alternative to operator+().
Declaration
public Instant Plus(Duration duration)
Parameters
Type Name Description
Duration duration The duration to add
Returns
Type Description
Instant A new Instant representing the result of the addition.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

PlusNanoseconds(Int64)

Returns a new value of this instant with the given number of nanoseconds added to it.
Declaration
public Instant PlusNanoseconds(long nanoseconds)
Parameters
Type Name Description
Int64 nanoseconds The nanoseconds to add to this instant to create the return value.
Returns
Type Description
Instant The result of adding the given number of ticks to this instant.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

PlusTicks(Int64)

Returns a new value of this instant with the given number of ticks added to it.
Declaration
public Instant PlusTicks(long ticks)
Parameters
Type Name Description
Int64 ticks The ticks to add to this instant to create the return value.
Returns
Type Description
Instant The result of adding the given number of ticks to this instant.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Subtract(Instant, Duration)

Subtracts a duration from an instant. Friendly alternative to operator-().
Declaration
public static Instant Subtract(Instant left, Duration right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Duration right The right hand side of the operator.
Returns
Type Description
Instant A new Instant representing the difference of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Subtract(Instant, Instant)

Subtracts one instant from another. Friendly alternative to operator-().
Declaration
public static Duration Subtract(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Duration A new Duration representing the difference of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

ToDateTimeOffset()

Constructs a DateTimeOffset from this Instant which has an offset of zero.
Declaration
public DateTimeOffset ToDateTimeOffset()
Returns
Type Description
DateTimeOffset A DateTimeOffset representing the same instant in time as this value.
Remarks

If the date and time is not on a tick boundary (the unit of granularity of DateTime) the value will be truncated towards the start of time.

Exceptions
Type Condition
InvalidOperationException The final date/time is outside the range of DateTimeOffset.

ToDateTimeUtc()

Constructs a DateTime from this Instant which has a Kind of Utc and represents the same instant of time as this value.
Declaration
public DateTime ToDateTimeUtc()
Returns
Type Description
DateTime A DateTime representing the same instant in time as this value, with a kind of "universal".
Remarks

If the date and time is not on a tick boundary (the unit of granularity of DateTime) the value will be truncated towards the start of time.

Exceptions
Type Condition
InvalidOperationException The final date/time is outside the range of DateTime.

ToJulianDate()

Returns the Julian Date of this instance - the number of days since JulianEpoch (noon on January 1st, 4713 BCE in the Julian calendar).
Declaration
public double ToJulianDate()
Returns
Type Description
Double The number of days (including fractional days) since the Julian Epoch.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

ToString()

Returns a String that represents this instance.
Declaration
public override string ToString()
Returns
Type Description
String The value of the current instance in the default format pattern ("g"), using the current thread's culture to obtain a format provider.
Overrides
ValueType.ToString()
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

ToString(String, IFormatProvider)

Formats the value of the current instance using the specified pattern.
Declaration
public string ToString(string patternText, IFormatProvider formatProvider)
Parameters
Type Name Description
String patternText The String specifying the pattern to use, or null to use the default format pattern ("g").
IFormatProvider formatProvider The IFormatProvider to use when formatting the value, or null to use the current thread's culture to obtain a format provider.
Returns
Type Description
String A String containing the value of the current instance in the specified format.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

ToUnixTimeMilliseconds()

Gets the number of milliseconds since the Unix epoch. Negative values represent instants before the Unix epoch.
Declaration
public long ToUnixTimeMilliseconds()
Returns
Type Description
Int64 The number of milliseconds since the Unix epoch.
Remarks
If the number of nanoseconds in this instant is not an exact number of milliseconds, the value is truncated towards the start of time.

ToUnixTimeSeconds()

Gets the number of seconds since the Unix epoch. Negative values represent instants before the Unix epoch.
Declaration
public long ToUnixTimeSeconds()
Returns
Type Description
Int64 The number of seconds since the Unix epoch.
Remarks
If the number of nanoseconds in this instant is not an exact number of seconds, the value is truncated towards the start of time.

ToUnixTimeTicks()

Gets the number of ticks since the Unix epoch. Negative values represent instants before the Unix epoch.
Declaration
public long ToUnixTimeTicks()
Returns
Type Description
Int64 The number of ticks since the Unix epoch.
Remarks
A tick is equal to 100 nanoseconds. There are 10,000 ticks in a millisecond. If the number of nanoseconds in this instant is not an exact number of ticks, the value is truncated towards the start of time.

WithOffset(Offset)

Returns the OffsetDateTime representing the same point in time as this instant, with the specified UTC offset in the ISO calendar system.
Declaration
public OffsetDateTime WithOffset(Offset offset)
Parameters
Type Name Description
Offset offset The offset from UTC with which to represent this instant.
Returns
Type Description
OffsetDateTime An OffsetDateTime for the same instant, with the given offset in the ISO calendar system
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

WithOffset(Offset, CalendarSystem)

Returns the OffsetDateTime representing the same point in time as this instant, with the specified UTC offset and calendar system.
Declaration
public OffsetDateTime WithOffset(Offset offset, CalendarSystem calendar)
Parameters
Type Name Description
Offset offset The offset from UTC with which to represent this instant.
CalendarSystem calendar The calendar system in which to represent this instant.
Returns
Type Description
OffsetDateTime An OffsetDateTime for the same instant, with the given offset and calendar
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException calendar is null.

Operators

Addition(Instant, Duration)

Implements the operator + (addition) for Instant + Duration.
Declaration
public static Instant operator +(Instant left, Duration right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Duration right The right hand side of the operator.
Returns
Type Description
Instant A new Instant representing the sum of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Equality(Instant, Instant)

Implements the operator == (equality).
Declaration
public static bool operator ==(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if values are equal to each other, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

GreaterThan(Instant, Instant)

Implements the operator > (greater than).
Declaration
public static bool operator>(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if the left value is greater than the right value, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

GreaterThanOrEqual(Instant, Instant)

Implements the operator >= (greater than or equal).
Declaration
public static bool operator >=(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if the left value is greater than or equal to the right value, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Inequality(Instant, Instant)

Implements the operator != (inequality).
Declaration
public static bool operator !=(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if values are not equal to each other, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

LessThan(Instant, Instant)

Implements the operator < (less than).
Declaration
public static bool operator <(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if the left value is less than the right value, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

LessThanOrEqual(Instant, Instant)

Implements the operator <= (less than or equal).
Declaration
public static bool operator <=(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Boolean true if the left value is less than or equal to the right value, otherwise false.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Subtraction(Instant, Duration)

Implements the operator - (subtraction) for Instant - Duration.
Declaration
public static Instant operator -(Instant left, Duration right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Duration right The right hand side of the operator.
Returns
Type Description
Instant A new Instant representing the difference of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Subtraction(Instant, Instant)

Implements the operator - (subtraction) for Instant - Instant.
Declaration
public static Duration operator -(Instant left, Instant right)
Parameters
Type Name Description
Instant left The left hand side of the operator.
Instant right The right hand side of the operator.
Returns
Type Description
Duration A new Duration representing the difference of the given values.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Explicit Interface Implementations

IComparable.CompareTo(Object)

Implementation of CompareTo(Object) to compare two instants.
Declaration
int IComparable.CompareTo(object obj)
Parameters
Type Name Description
Object obj The object to compare this value with.
Returns
Type Description
Int32 The result of comparing this instant with another one; see CompareTo(Instant) for general details. If obj is null, this method returns a value greater than 0.
Remarks
This uses explicit interface implementation to avoid it being called accidentally. The generic implementation should usually be preferred.
Exceptions
Type Condition
ArgumentException obj is non-null but does not refer to an instance of Instant.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Implementation of GetObjectData(SerializationInfo, StreamingContext).
Declaration
[SecurityCritical]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
Parameters
Type Name Description
SerializationInfo info The SerializationInfo to populate with data.
StreamingContext context The destination for this serialization.
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException info is null.

IXmlSerializable.GetSchema()

Declaration
XmlSchema IXmlSerializable.GetSchema()
Returns
Type Description
XmlSchema
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

IXmlSerializable.ReadXml(XmlReader)

Declaration
void IXmlSerializable.ReadXml(XmlReader reader)
Parameters
Type Name Description
XmlReader reader
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException reader is null.

IXmlSerializable.WriteXml(XmlWriter)

Declaration
void IXmlSerializable.WriteXml(XmlWriter writer)
Parameters
Type Name Description
XmlWriter writer
Remarks

An Instant has no concept of a particular time zone or calendar: it simply represents a point in time that can be globally agreed-upon.

Exceptions
Type Condition
ArgumentNullException writer is null.

Implements

System.IEquatable<T>
System.IComparable<T>
System.IFormattable
System.IComparable
System.Xml.Serialization.IXmlSerializable
System.Runtime.Serialization.ISerializable
In This Article
Back to top Generated by DocFX