Skip to content

Commit

Permalink
Implement DateTimeOffset.TotalOffsetMinutes (#78943)
Browse files Browse the repository at this point in the history
Co-authored-by: Eirik Tsarpalis <[email protected]>
Fixes #52081
  • Loading branch information
tarekgh authored Nov 29, 2022
1 parent af8a5ca commit 8ccdb1c
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public DateTimeOffset(int year, int month, int day, int hour, int minute, int se
}

// Constructs a DateTimeOffset from a given year, month, day, hour,
// minute, second, millsecond and offset
// minute, second, millisecond and offset
public DateTimeOffset(int year, int month, int day, int hour, int minute, int second, int millisecond, TimeSpan offset)
{
_offsetMinutes = ValidateOffset(offset);
Expand All @@ -161,7 +161,7 @@ public DateTimeOffset(int year, int month, int day, int hour, int minute, int se
}

// Constructs a DateTimeOffset from a given year, month, day, hour,
// minute, second, millsecond, Calendar and offset.
// minute, second, millisecond, Calendar and offset.
public DateTimeOffset(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, TimeSpan offset)
{
_offsetMinutes = ValidateOffset(offset);
Expand Down Expand Up @@ -417,6 +417,11 @@ public DateTimeOffset ToOffset(TimeSpan offset) =>

public TimeSpan Offset => new TimeSpan(0, _offsetMinutes, 0);

/// <summary>
/// Gets the total number of minutes representing the time's offset from Coordinated Universal Time (UTC).
/// </summary>
public int TotalOffsetMinutes => _offsetMinutes;

// Returns the second part of this DateTimeOffset. The returned value is
// an integer between 0 and 59.
//
Expand Down
1 change: 1 addition & 0 deletions src/libraries/System.Runtime/ref/System.Runtime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1745,6 +1745,7 @@ public enum DateTimeKind
public int Second { get { throw null; } }
public long Ticks { get { throw null; } }
public System.TimeSpan TimeOfDay { get { throw null; } }
public int TotalOffsetMinutes { get { throw null; } }
public System.DateTime UtcDateTime { get { throw null; } }
public static System.DateTimeOffset UtcNow { get { throw null; } }
public long UtcTicks { get { throw null; } }
Expand Down
23 changes: 23 additions & 0 deletions src/libraries/System.Runtime/tests/System/DateTimeOffsetTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1381,6 +1381,29 @@ public static void ToString_ParseExactSpan_RoundtripsSuccessfully()
Assert.Equal(expectedString, actual.ToString("u"));
}

[Theory]
[InlineData(5)]
[InlineData(-5)]
[InlineData(0)]
[InlineData(14 * 60)] // max offset
[InlineData(-14 * 60)] // min offset
public static void TotalNumberOfMinutesTest(int minutesCount)
{
DateTimeOffset dto = new DateTimeOffset(new DateTime(2022, 11, 12), TimeSpan.FromMinutes(minutesCount));
Assert.Equal(minutesCount, dto.TotalOffsetMinutes);
Assert.Equal(minutesCount, dto.Offset.TotalMinutes);
}

[Fact]
public static void TotalNumberOfMinutesNowTest()
{
DateTimeOffset dto = DateTimeOffset.UtcNow;
Assert.Equal(0, dto.TotalOffsetMinutes);

dto = DateTimeOffset.Now;
Assert.Equal(dto.Offset.TotalMinutes, dto.TotalOffsetMinutes);
}

[Fact]
public static void TryFormat_ToString_EqualResults()
{
Expand Down

0 comments on commit 8ccdb1c

Please sign in to comment.