Class Period
Inherited Members
Namespace: NodaTime
Assembly: NodaTime.dll
Syntax
[Serializable]
public sealed class Period : IEquatable<Period>, ISerializable
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Properties
Days
Declaration
public int Days { get; }
Property Value
Type  Description 

Int32  The number of days within this period. 
Remarks
HasDateComponent
Declaration
public bool HasDateComponent { get; }
Property Value
Type  Description 

Boolean  true if this period contains any nonzero datebased properties (days or higher); false otherwise. 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
HasTimeComponent
Declaration
public bool HasTimeComponent { get; }
Property Value
Type  Description 

Boolean  true if the period contains any nonzerovalued timebased properties (hours or lower); false otherwise. 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Hours
Declaration
public long Hours { get; }
Property Value
Type  Description 

Int64  The number of hours within this period. 
Remarks
Milliseconds
Declaration
public long Milliseconds { get; }
Property Value
Type  Description 

Int64  The number of milliseconds within this period. 
Remarks
Minutes
Declaration
public long Minutes { get; }
Property Value
Type  Description 

Int64  The number of minutes within this period. 
Remarks
Months
Declaration
public int Months { get; }
Property Value
Type  Description 

Int32  The number of months within this period. 
Remarks
Nanoseconds
Declaration
public long Nanoseconds { get; }
Property Value
Type  Description 

Int64  The number of nanoseconds within this period. 
Remarks
NormalizingEqualityComparer
Declaration
public static IEqualityComparer<Period> NormalizingEqualityComparer { get; }
Property Value
Type  Description 

IEqualityComparer<Period>  An equality comparer which compares periods by first normalizing them. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Seconds
Declaration
public long Seconds { get; }
Property Value
Type  Description 

Int64  The number of seconds within this period. 
Remarks
Ticks
Declaration
public long Ticks { get; }
Property Value
Type  Description 

Int64  The number of ticks within this period. 
Remarks
Weeks
Declaration
public int Weeks { get; }
Property Value
Type  Description 

Int32  The number of weeks within this period. 
Remarks
Years
Declaration
public int Years { get; }
Property Value
Type  Description 

Int32  The number of years within this period. 
Remarks
Zero
Declaration
public static Period Zero { get; }
Property Value
Type  Description 

Period  A period containing only zerovalued properties. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Methods
Between(LocalDate, LocalDate)
Declaration
public static Period Between(LocalDate start, LocalDate end)
Parameters
Type  Name  Description 

LocalDate  start  Start date 
LocalDate  end  End date 
Returns
Type  Description 

Period  The period between the two dates, using year, month and day units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative.
The calendar systems of the two dates must be the same; an exception will be thrown otherwise.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(
new LocalDate(1990, 6, 26),
new LocalDate(2017, 11, 15));
Console.WriteLine(period.Years);
Console.WriteLine(period.Months);
Console.WriteLine(period.Days);
Console.WriteLine(period.ToString());
Output:
27
4
20
P27Y4M20D
Exceptions
Type  Condition 

ArgumentException 
start and end are not in the same calendar system.

Between(LocalDate, LocalDate, PeriodUnits)
Declaration
public static Period Between(LocalDate start, LocalDate end, PeriodUnits units)
Parameters
Type  Name  Description 

LocalDate  start  Start date 
LocalDate  end  End date 
PeriodUnits  units  Units to use for calculations 
Returns
Type  Description 

Period  The period between the given dates, using the given units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative. If the given set of units cannot exactly reach the end point (e.g. finding
the difference between 12th February and 15th March in months) the result will be such that adding it to start
will give a value between start
and end
. In other words,
any rounding is "towards start"; this is true whether the resulting period is negative or positive.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(
new LocalDate(2016, 11, 14),
new LocalDate(2017, 11, 21),
PeriodUnits.Years  PeriodUnits.Days);
Console.WriteLine(period.Years);
Console.WriteLine(period.Days);
Console.WriteLine(period.ToString());
Output:
1
7
P1Y7D
Exceptions
Type  Condition 

ArgumentException  units contains time units, is empty or contains unknown values. 
ArgumentException  start and end use different calendars. 
Between(LocalDateTime, LocalDateTime)
Declaration
public static Period Between(LocalDateTime start, LocalDateTime end)
Parameters
Type  Name  Description 

LocalDateTime  start  Start date/time 
LocalDateTime  end  End date/time 
Returns
Type  Description 

Period  The period between the two date and time values, using all units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(
new LocalDateTime(2015, 1, 23, 21, 30, 15),
new LocalDateTime(2017, 10, 15, 21, 02, 17));
Console.WriteLine(period.Years);
Console.WriteLine(period.Months);
Console.WriteLine(period.Days);
Console.WriteLine(period.Hours);
Console.WriteLine(period.Minutes);
Console.WriteLine(period.Seconds);
Console.WriteLine(period.ToString());
Output:
2
8
21
23
32
2
P2Y8M21DT23H32M2S
Between(LocalDateTime, LocalDateTime, PeriodUnits)
Declaration
public static Period Between(LocalDateTime start, LocalDateTime end, PeriodUnits units)
Parameters
Type  Name  Description 

LocalDateTime  start  Start date/time 
LocalDateTime  end  End date/time 
PeriodUnits  units  Units to use for calculations 
Returns
Type  Description 

Period  The period between the given date/times, using the given units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative. If the given set of units cannot exactly reach the end point (e.g. finding
the difference between 1am and 3:15am in hours) the result will be such that adding it to start
will give a value between start
and end
. In other words,
any rounding is "towards start"; this is true whether the resulting period is negative or positive.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(
new LocalDateTime(2015, 1, 23, 21, 30, 15),
new LocalDateTime(2017, 10, 15, 21, 02, 17),
PeriodUnits.Years  PeriodUnits.Days  PeriodUnits.Hours);
Console.WriteLine(period.Years);
Console.WriteLine(period.Days);
Console.WriteLine(period.Hours);
Console.WriteLine(period.ToString());
Output:
2
264
23
P2Y264DT23H
Exceptions
Type  Condition 

ArgumentException  units is empty or contained unknown values. 
ArgumentException  start and end use different calendars. 
Between(LocalTime, LocalTime)
Declaration
public static Period Between(LocalTime start, LocalTime end)
Parameters
Type  Name  Description 

LocalTime  start  Start time 
LocalTime  end  End time 
Returns
Type  Description 

Period  The period between the two times, using the time period units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(new LocalTime(10, 10), new LocalTime(13, 15));
Console.WriteLine(period.Hours);
Console.WriteLine(period.Minutes);
Console.WriteLine(period.ToString());
Output:
3
5
PT3H5M
Between(LocalTime, LocalTime, PeriodUnits)
Declaration
public static Period Between(LocalTime start, LocalTime end, PeriodUnits units)
Parameters
Type  Name  Description 

LocalTime  start  Start time 
LocalTime  end  End time 
PeriodUnits  units  Units to use for calculations 
Returns
Type  Description 

Period  The period between the given times, using the given units. (The value returned is never null.) 
Remarks
end
is before start
, each property in the returned period
will be negative. If the given set of units cannot exactly reach the end point (e.g. finding
the difference between 3am and 4.30am in hours) the result will be such that adding it to start
will give a value between start
and end
. In other words,
any rounding is "towards start"; this is true whether the resulting period is negative or positive.
Sample snippet
using NodaTime;
using System;
Period period = Period.Between(
new LocalTime(10, 10, 2),
new LocalTime(13, 15, 49),
PeriodUnits.Hours  PeriodUnits.Seconds);
Console.WriteLine(period.Hours);
Console.WriteLine(period.Seconds);
Console.WriteLine(period.ToString());
Output:
3
347
PT3H347S
Exceptions
Type  Condition 

ArgumentException  units contains date units, is empty or contains unknown values. 
ArgumentException  start and end use different calendars. 
CreateComparer(LocalDateTime)
Declaration
public static IComparer<Period> CreateComparer(LocalDateTime baseDateTime)
Parameters
Type  Name  Description 

LocalDateTime  baseDateTime  The base local date/time to use for comparisons. 
Returns
Type  Description 

IComparer<Period>  The new comparer. (The value returned is never null.) 
Remarks
baseDateTime
and compares
the results. In some cases this arithmetic isn't actually required  when two periods can be
converted to durations, the comparer uses that conversion for efficiency.
Equals(Period)
Declaration
public bool Equals(Period other)
Parameters
Type  Name  Description 

Period  other  The period to compare this one with. 
Returns
Type  Description 

Boolean  True if this period has the same values for the same properties as the one specified. 
Remarks
Equals(Object)
Declaration
public override bool Equals(object other)
Parameters
Type  Name  Description 

Object  other  The value to compare this one with. 
Returns
Type  Description 

Boolean  true if the other object is a period equal to this one, consistent with Equals(Period) 
Overrides
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
FromDays(Int32)
Declaration
public static Period FromDays(int days)
Parameters
Type  Name  Description 

Int32  days  The number of days in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of days. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromDays(3);
Console.WriteLine(period.Days);
Console.WriteLine(period.ToString());
Output:
3
P3D
FromHours(Int64)
Declaration
public static Period FromHours(long hours)
Parameters
Type  Name  Description 

Int64  hours  The number of hours in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of hours. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromHours(5);
Console.WriteLine(period.Hours);
Console.WriteLine(period.ToString());
Output:
5
PT5H
FromMilliseconds(Int64)
Declaration
public static Period FromMilliseconds(long milliseconds)
Parameters
Type  Name  Description 

Int64  milliseconds  The number of milliseconds in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of milliseconds. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromMilliseconds(1500);
Console.WriteLine(period.Milliseconds);
Console.WriteLine(period.ToString());
Output:
1500
PT1500s
FromMinutes(Int64)
Declaration
public static Period FromMinutes(long minutes)
Parameters
Type  Name  Description 

Int64  minutes  The number of minutes in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of minutes. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromMinutes(15);
Console.WriteLine(period.Minutes);
Console.WriteLine(period.ToString());
Output:
15
PT15M
FromMonths(Int32)
Declaration
public static Period FromMonths(int months)
Parameters
Type  Name  Description 

Int32  months  The number of months in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of months. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromMonths(10);
Console.WriteLine(period.Months);
Console.WriteLine(period.ToString());
Output:
10
P10M
FromNanoseconds(Int64)
Declaration
public static Period FromNanoseconds(long nanoseconds)
Parameters
Type  Name  Description 

Int64  nanoseconds  The number of nanoseconds in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of nanoseconds. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromNanoseconds(42);
Console.WriteLine(period.Nanoseconds);
Console.WriteLine(period.ToString());
Output:
42
PT42n
FromSeconds(Int64)
Declaration
public static Period FromSeconds(long seconds)
Parameters
Type  Name  Description 

Int64  seconds  The number of seconds in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of seconds. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromSeconds(70);
Console.WriteLine(period.Seconds);
Console.WriteLine(period.ToString());
Output:
70
PT70S
FromTicks(Int64)
Declaration
public static Period FromTicks(long ticks)
Parameters
Type  Name  Description 

Int64  ticks  The number of ticks in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of ticks. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromTicks(42);
Console.WriteLine(period.Ticks);
Console.WriteLine(period.ToString());
Output:
42
PT42t
FromWeeks(Int32)
Declaration
public static Period FromWeeks(int weeks)
Parameters
Type  Name  Description 

Int32  weeks  The number of weeks in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of weeks. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromWeeks(1);
Console.WriteLine(period.Weeks);
Console.WriteLine(period.ToString());
Output:
1
P1W
FromYears(Int32)
Declaration
public static Period FromYears(int years)
Parameters
Type  Name  Description 

Int32  years  The number of years in the new period 
Returns
Type  Description 

Period  A period consisting of the given number of years. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Sample snippet
using NodaTime;
using System;
Period period = Period.FromYears(27);
Console.WriteLine(period.Years);
Console.WriteLine(period.ToString());
Output:
27
P27Y
GetHashCode()
Declaration
public override int GetHashCode()
Returns
Type  Description 

Int32  The hash code for this period. 
Overrides
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Normalize()
Declaration
public Period Normalize()
Returns
Type  Description 

Period  The normalized period. (The value returned is never null.) 
Remarks
Exceptions
Type  Condition 

OverflowException  The period doesn't have years or months, but it contains more than MaxValue nanoseconds when the combined weeks/days/time portions are considered. This is over 292 years, so unlikely to be a problem in normal usage. In some cases this may occur even though the theoretical result would be valid due to balancing positive and negative values, but for simplicity there is no attempt to work around this. 
See Also
ToBuilder()
Declaration
public PeriodBuilder ToBuilder()
Returns
Type  Description 

PeriodBuilder  A builder with the same values and units as this period. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
ToDuration()
Declaration
public Duration ToDuration()
Returns
Type  Description 

Duration  The duration of the period. 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Exceptions
Type  Condition 

InvalidOperationException  The month or year property in the period is nonzero. 
OverflowException  The period doesn't have years or months, but the calculation overflows the bounds of Duration. In some cases this may occur even though the theoretical result would be valid due to balancing positive and negative values, but for simplicity there is no attempt to work around this  in realistic periods, it shouldn't be a problem. 
ToString()
Declaration
public override string ToString()
Returns
Type  Description 

String  A formatted representation of this period. 
Overrides
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Operators
Addition(Period, Period)
Declaration
public static Period operator +(Period left, Period right)
Parameters
Type  Name  Description 

Period  left  The first period to add 
Period  right  The second period to add 
Returns
Type  Description 

Period  The sum of the two periods. The units of the result will be the union of those in both periods. (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Exceptions
Type  Condition 

ArgumentNullException  left or right is null 
Subtraction(Period, Period)
Declaration
public static Period operator (Period minuend, Period subtrahend)
Parameters
Type  Name  Description 

Period  minuend  The period to subtract the second operand from 
Period  subtrahend  The period to subtract the first operand from 
Returns
Type  Description 

Period  The result of subtracting all the values in the second operand from the values in the first. The units of the result will be the union of both periods, even if the subtraction caused some properties to become zero (so "2 weeks, 1 days" minus "2 weeks" is "zero weeks, 1 days", not "1 days"). (The value returned is never null.) 
Remarks
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)
Exceptions
Type  Condition 

ArgumentNullException  minuend or subtrahend is null 
Explicit Interface Implementations
ISerializable.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
A Period contains a set of properties such as Years, Months, and so on that return the number of each unit contained within this period. Note that these properties are not normalized in any way by default, and so a Period may contain values such as "2 hours and 90 minutes". The Normalize() method will convert equivalent periods into a standard representation.
Periods can contain negative units as well as positive units ("+2 hours, 43 minutes, +10 seconds"), but do not differentiate between properties that are zero and those that are absent (i.e. a period created as "10 years" and one created as "10 years, zero months" are equal periods; the Months property returns zero in both cases).
Period equality is implemented by comparing each property's values individually.
Periods operate on calendarrelated types such as LocalDateTime whereas Duration operates on instants on the time line. (Note that although ZonedDateTime includes both concepts, it only supports durationbased arithmetic.)