diff --git a/src/libraries/System.Private.CoreLib/src/System/DateTimeOffset.cs b/src/libraries/System.Private.CoreLib/src/System/DateTimeOffset.cs index 7c05f4ef5216b1..417764356def3d 100644 --- a/src/libraries/System.Private.CoreLib/src/System/DateTimeOffset.cs +++ b/src/libraries/System.Private.CoreLib/src/System/DateTimeOffset.cs @@ -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); @@ -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); @@ -417,6 +417,11 @@ public DateTimeOffset ToOffset(TimeSpan offset) => public TimeSpan Offset => new TimeSpan(0, _offsetMinutes, 0); + /// + /// Gets the total number of minutes representing the time's offset from Coordinated Universal Time (UTC). + /// + public int TotalOffsetMinutes => _offsetMinutes; + // Returns the second part of this DateTimeOffset. The returned value is // an integer between 0 and 59. // diff --git a/src/libraries/System.Runtime/ref/System.Runtime.cs b/src/libraries/System.Runtime/ref/System.Runtime.cs index 713acb7e8120b1..a531a034cb5b67 100644 --- a/src/libraries/System.Runtime/ref/System.Runtime.cs +++ b/src/libraries/System.Runtime/ref/System.Runtime.cs @@ -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; } } diff --git a/src/libraries/System.Runtime/tests/System/DateTimeOffsetTests.cs b/src/libraries/System.Runtime/tests/System/DateTimeOffsetTests.cs index 6c4ae73b4a06ca..4aa4e79619e90d 100644 --- a/src/libraries/System.Runtime/tests/System/DateTimeOffsetTests.cs +++ b/src/libraries/System.Runtime/tests/System/DateTimeOffsetTests.cs @@ -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() {