< Summary

Information
Class: MyNet.Primitives.DateTimeOffsetExtensions
Assembly: MyNet.Primitives
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Primitives/Temporal/Extensions/DateTimeOffsetExtensions.cs
Tag: 323_28699572109
Line coverage
57%
Covered lines: 63
Uncovered lines: 47
Coverable lines: 110
Total lines: 457
Line coverage: 57.2%
Branch coverage
62%
Covered branches: 28
Total branches: 45
Branch coverage: 62.2%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddFluentTimeSpan(...)100%11100%
SubtractFluentTimeSpan(...)100%210%
EndOfDay(...)100%11100%
BeginningOfDay(...)100%11100%
NextYear(...)50%2257.14%
PreviousYear(...)50%2257.14%
NextDay(...)100%11100%
PreviousDay(...)100%11100%
Next(...)100%22100%
Previous(...)100%22100%
WeekAfter(...)100%210%
WeekEarlier(...)100%210%
IncreaseTime(...)100%210%
DecreaseTime(...)100%210%
SetTime(...)100%210%
SetTime(...)100%210%
SetTime(...)100%210%
SetTime(...)100%11100%
SetHour(...)100%210%
SetMinute(...)100%210%
SetSecond(...)100%210%
SetMillisecond(...)100%210%
Midnight(...)100%210%
Noon(...)100%11100%
SetDate(...)100%210%
SetDate(...)100%210%
SetDate(...)100%11100%
SetYear(...)100%210%
SetMonth(...)100%210%
SetDay(...)100%11100%
At(...)100%210%
At(...)100%210%
At(...)100%210%
FirstDayOfQuarter(...)100%210%
FirstDayOfMonth(...)100%11100%
LastDayOfQuarter(...)100%210%
LastDayOfMonth(...)100%11100%
AddBusinessDays(...)100%88100%
SubtractBusinessDays(...)100%210%
IsInFuture(...)100%11100%
IsInPast(...)100%11100%
Round(...)46.15%771327.77%
FirstDayOfWeek(...)50%22100%
FirstDayOfYear(...)100%11100%
LastDayOfWeek(...)100%11100%
LastDayOfYear(...)100%11100%
PreviousMonth(...)50%66100%
NextMonth(...)50%66100%
SameDay(...)100%11100%
SameMonth(...)50%22100%
SameYear(...)100%11100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Primitives/Temporal/Extensions/DateTimeOffsetExtensions.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="DateTimeOffsetExtensions.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Globalization;
 9using MyNet.Primitives.Temporal;
 10
 11#pragma warning disable IDE0130 // Namespace does not match folder structure
 12namespace MyNet.Primitives;
 13#pragma warning restore IDE0130 // Namespace does not match folder structure
 14
 15public static class DateTimeOffsetExtensions
 16{
 17    extension(DateTimeOffset dateTimeOffset)
 18    {
 19        /// <summary>
 20        /// Returns a new <see cref="DateTime"/> that adds the value of the specified <see cref="FluentTimeSpan"/> to th
 21        /// </summary>
 322        public DateTimeOffset AddFluentTimeSpan(FluentTimeSpan timeSpan) => dateTimeOffset.AddMonths(timeSpan.Months)
 323            .AddYears(timeSpan.Years)
 324            .Add(timeSpan.TimeSpan);
 25
 26        /// <summary>
 27        /// Returns a new <see cref="DateTime"/> that subtracts the value of the specified <see cref="FluentTimeSpan"/> 
 28        /// </summary>
 029        public DateTimeOffset SubtractFluentTimeSpan(FluentTimeSpan timeSpan) => dateTimeOffset.AddMonths(-timeSpan.Mont
 030            .AddYears(-timeSpan.Years)
 031            .Subtract(timeSpan.TimeSpan);
 32
 33        /// <summary>
 34        /// Returns the very end of the given day (the last millisecond of the last hour for the given <see cref="DateTi
 35        /// </summary>
 336        public DateTimeOffset EndOfDay() => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 23, 59, 5
 37
 38        /// <summary>
 39        /// Returns the Start of the given day (the first millisecond of the given <see cref="DateTimeOffset"/>).
 40        /// </summary>
 341        public DateTimeOffset BeginningOfDay() => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 0, 
 42
 43        /// <summary>
 44        /// Returns the same date (same Day, Month, Hour, Minute, Second etc.) in the next calendar year.
 45        /// If that day does not exist in next year in same month, number of missing days is added to the last day in sa
 46        /// </summary>
 47        public DateTimeOffset NextYear()
 48        {
 349            var nextYear = dateTimeOffset.Year + 1;
 350            var numberOfDaysInSameMonthNextYear = DateTime.DaysInMonth(nextYear, dateTimeOffset.Month);
 51
 352            if (numberOfDaysInSameMonthNextYear >= dateTimeOffset.Day)
 353                return new(nextYear, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Hour, dateTimeOffset.Minut
 054            var differenceInDays = dateTimeOffset.Day - numberOfDaysInSameMonthNextYear;
 055            var dateTimeOffset1 = new DateTimeOffset(nextYear, dateTimeOffset.Month, numberOfDaysInSameMonthNextYear, da
 056            return dateTimeOffset1 + differenceInDays.Days();
 57        }
 58
 59        /// <summary>
 60        /// Returns the same date (same Day, Month, Hour, Minute, Second etc.) in the previous calendar year.
 61        /// If that day does not exist in previous year in same month, number of missing days is added to the last day i
 62        /// </summary>
 63        public DateTimeOffset PreviousYear()
 64        {
 365            var previousYear = dateTimeOffset.Year - 1;
 366            var numberOfDaysInSameMonthPreviousYear = DateTime.DaysInMonth(previousYear, dateTimeOffset.Month);
 67
 368            if (numberOfDaysInSameMonthPreviousYear >= dateTimeOffset.Day)
 369                return new(previousYear, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Hour, dateTimeOffset.M
 070            var differenceInDays = dateTimeOffset.Day - numberOfDaysInSameMonthPreviousYear;
 071            var dateTime = new DateTimeOffset(previousYear, dateTimeOffset.Month, numberOfDaysInSameMonthPreviousYear, d
 072            return dateTime + differenceInDays.Days();
 73        }
 74
 75        /// <summary>
 76        /// Returns <see cref="DateTimeOffset"/> increased by 24 hours ie Next Day.
 77        /// </summary>
 678        public DateTimeOffset NextDay() => dateTimeOffset + 1.Days();
 79
 80        /// <summary>
 81        /// Returns <see cref="DateTimeOffset"/> decreased by 24h period ie Previous Day.
 82        /// </summary>
 683        public DateTimeOffset PreviousDay() => dateTimeOffset - 1.Days();
 84
 85        /// <summary>
 86        /// Returns first next occurrence of specified <see cref="DayOfWeek"/>.
 87        /// </summary>
 88        public DateTimeOffset Next(DayOfWeek day)
 89        {
 90            do
 391                dateTimeOffset = dateTimeOffset.NextDay();
 392            while (dateTimeOffset.DayOfWeek != day);
 93
 394            return dateTimeOffset;
 95        }
 96
 97        /// <summary>
 98        /// Returns first next occurrence of specified <see cref="DayOfWeek"/>.
 99        /// </summary>
 100        public DateTimeOffset Previous(DayOfWeek day)
 101        {
 102            do
 3103                dateTimeOffset = dateTimeOffset.PreviousDay();
 3104            while (dateTimeOffset.DayOfWeek != day);
 105
 3106            return dateTimeOffset;
 107        }
 108
 109        /// <summary>
 110        /// Increases supplied <see cref="DateTimeOffset"/> for 7 days ie returns the Next Week.
 111        /// </summary>
 0112        public DateTimeOffset WeekAfter() => dateTimeOffset + 1.Weeks();
 113
 114        /// <summary>
 115        /// Decreases supplied <see cref="DateTimeOffset"/> for 7 days ie returns the Previous Week.
 116        /// </summary>
 0117        public DateTimeOffset WeekEarlier() => dateTimeOffset - 1.Weeks();
 118
 119        /// <summary>
 120        /// Increases the <see cref="DateTimeOffset"/> object with given <see cref="TimeSpan"/> value.
 121        /// </summary>
 0122        public DateTimeOffset IncreaseTime(TimeSpan toAdd) => dateTimeOffset + toAdd;
 123
 124        /// <summary>
 125        /// Decreases the <see cref="DateTimeOffset"/> object with given <see cref="TimeSpan"/> value.
 126        /// </summary>
 0127        public DateTimeOffset DecreaseTime(TimeSpan toSubtract) => dateTimeOffset - toSubtract;
 128
 129        /// <summary>
 130        /// Returns the original <see cref="DateTimeOffset"/> with Hour part changed to supplied hour parameter.
 131        /// </summary>
 0132        public DateTimeOffset SetTime(int hour) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, ho
 133
 134        /// <summary>
 135        /// Returns the original <see cref="DateTimeOffset"/> with Hour and Minute parts changed to supplied hour and mi
 136        /// </summary>
 0137        public DateTimeOffset SetTime(int hour, int minute) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOf
 138
 139        /// <summary>
 140        /// Returns the original <see cref="DateTimeOffset"/> with Hour, Minute and Second parts changed to supplied hou
 141        /// </summary>
 0142        public DateTimeOffset SetTime(int hour, int minute, int second) => new(dateTimeOffset.Year, dateTimeOffset.Month
 143
 144        /// <summary>
 145        /// Returns the original <see cref="DateTimeOffset"/> with Hour, Minute, Second and Millisecond parts changed to
 146        /// </summary>
 6147        public DateTimeOffset SetTime(int hour, int minute, int second, int millisecond) => new(dateTimeOffset.Year, dat
 148
 149        /// <summary>
 150        /// Returns <see cref="DateTimeOffset"/> with changed Hour part.
 151        /// </summary>
 0152        public DateTimeOffset SetHour(int hour) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, ho
 153
 154        /// <summary>
 155        /// Returns <see cref="DateTimeOffset"/> with changed Minute part.
 156        /// </summary>
 0157        public DateTimeOffset SetMinute(int minute) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day
 158
 159        /// <summary>
 160        /// Returns <see cref="DateTimeOffset"/> with changed Second part.
 161        /// </summary>
 0162        public DateTimeOffset SetSecond(int second) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day
 163
 164        /// <summary>
 165        /// Returns <see cref="DateTimeOffset"/> with changed Millisecond part.
 166        /// </summary>
 0167        public DateTimeOffset SetMillisecond(int millisecond) => new(dateTimeOffset.Year, dateTimeOffset.Month, dateTime
 168
 169        /// <summary>
 170        /// Returns original <see cref="DateTimeOffset"/> value with time part set to midnight (alias for <see cref="Beg
 171        /// </summary>
 0172        public DateTimeOffset Midnight() => dateTimeOffset.BeginningOfDay();
 173
 174        /// <summary>
 175        /// Returns original <see cref="DateTimeOffset"/> value with time part set to Noon (12:00:00h).
 176        /// </summary>
 177        /// <returns>A <see cref="DateTimeOffset"/> value with time part set to Noon (12:00:00h).</returns>
 3178        public DateTimeOffset Noon() => dateTimeOffset.SetTime(12, 0, 0, 0);
 179
 180        /// <summary>
 181        /// Returns <see cref="DateTimeOffset"/> with changed Year part.
 182        /// </summary>
 0183        public DateTimeOffset SetDate(int year) => new(year, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Ho
 184
 185        /// <summary>
 186        /// Returns <see cref="DateTimeOffset"/> with changed Year and Month part.
 187        /// </summary>
 0188        public DateTimeOffset SetDate(int year, int month) => new(year, month, dateTimeOffset.Day, dateTimeOffset.Hour, 
 189
 190        /// <summary>
 191        /// Returns <see cref="DateTimeOffset"/> with changed Year, Month and Day part.
 192        /// </summary>
 12193        public DateTimeOffset SetDate(int year, int month, int day) => new(year, month, day, dateTimeOffset.Hour, dateTi
 194
 195        /// <summary>
 196        /// Returns <see cref="DateTimeOffset"/> with changed Year part.
 197        /// </summary>
 0198        public DateTimeOffset SetYear(int year) => new(year, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Ho
 199
 200        /// <summary>
 201        /// Returns <see cref="DateTimeOffset"/> with changed Month part.
 202        /// </summary>
 0203        public DateTimeOffset SetMonth(int month) => new(dateTimeOffset.Year, month, dateTimeOffset.Day, dateTimeOffset.
 204
 205        /// <summary>
 206        /// Returns <see cref="DateTimeOffset"/> with changed Day part.
 207        /// </summary>
 18208        public DateTimeOffset SetDay(int day) => new(dateTimeOffset.Year, dateTimeOffset.Month, day, dateTimeOffset.Hour
 209
 210        /// <summary>
 211        /// Returns the given <see cref="DateTimeOffset"/> with hour and minutes set At given values.
 212        /// </summary>
 213        /// <param name="hour">The hour to set time to.</param>
 214        /// <param name="minute">The minute to set time to.</param>
 215        /// <returns><see cref="DateTimeOffset"/> with hour and minute set to given values.</returns>
 0216        public DateTimeOffset At(int hour, int minute) => dateTimeOffset.SetTime(hour, minute);
 217
 218        /// <summary>
 219        /// Returns the given <see cref="DateTimeOffset"/> with hour and minutes and seconds set At given values.
 220        /// </summary>
 221        /// <param name="hour">The hour to set time to.</param>
 222        /// <param name="minute">The minute to set time to.</param>
 223        /// <param name="second">The second to set time to.</param>
 224        /// <returns><see cref="DateTimeOffset"/> with hour and minutes and seconds set to given values.</returns>
 0225        public DateTimeOffset At(int hour, int minute, int second) => dateTimeOffset.SetTime(hour, minute, second);
 226
 227        /// <summary>
 228        /// Returns the given <see cref="DateTimeOffset"/> with hour and minutes and seconds and milliseconds set At giv
 229        /// </summary>
 230        /// <param name="hour">The hour to set time to.</param>
 231        /// <param name="minute">The minute to set time to.</param>
 232        /// <param name="second">The second to set time to.</param>
 233        /// <param name="milliseconds">The milliseconds to set time to.</param>
 234        /// <returns><see cref="DateTimeOffset"/> with hour and minutes and seconds set to given values.</returns>
 0235        public DateTimeOffset At(int hour, int minute, int second, int milliseconds) => dateTimeOffset.SetTime(hour, min
 236
 237        /// <summary>
 238        /// Sets the day of the <see cref="DateTimeOffset"/> to the first day in that calendar quarter.
 239        /// credit to http://www.devcurry.com/2009/05/find-first-and-last-day-of-current.html.
 240        /// </summary>
 241        /// <returns>given <see cref="DateTimeOffset"/> with the day part set to the first day in the quarter.</returns>
 242        public DateTimeOffset FirstDayOfQuarter()
 243        {
 0244            var currentQuarter = ((dateTimeOffset.Month - 1) / 3) + 1;
 0245            return dateTimeOffset.SetDate(dateTimeOffset.Year, (3 * currentQuarter) - 2, 1);
 246        }
 247
 248        /// <summary>
 249        /// Sets the day of the <see cref="DateTimeOffset"/> to the first day in that month.
 250        /// </summary>
 251        /// <returns>given <see cref="DateTimeOffset"/> with the day part set to the first day in that month.</returns>
 3252        public DateTimeOffset FirstDayOfMonth() => dateTimeOffset.SetDay(1);
 253
 254        /// <summary>
 255        /// Sets the day of the <see cref="DateTimeOffset"/> to the last day in that calendar quarter.
 256        /// credit to http://www.devcurry.com/2009/05/find-first-and-last-day-of-current.html.
 257        /// </summary>
 258        /// <returns>given <see cref="DateTimeOffset"/> with the day part set to the last day in the quarter.</returns>
 259        public DateTimeOffset LastDayOfQuarter()
 260        {
 0261            var currentQuarter = ((dateTimeOffset.Month - 1) / 3) + 1;
 0262            var firstDay = dateTimeOffset.SetDate(dateTimeOffset.Year, (3 * currentQuarter) - 2, 1);
 0263            return firstDay.SetMonth(firstDay.Month + 2).LastDayOfMonth();
 264        }
 265
 266        /// <summary>
 267        /// Sets the day of the <see cref="DateTimeOffset"/> to the last day in that month.
 268        /// </summary>
 269        /// <returns>given <see cref="DateTimeOffset"/> with the day part set to the last day in that month.</returns>
 9270        public DateTimeOffset LastDayOfMonth() => dateTimeOffset.SetDay(DateTime.DaysInMonth(dateTimeOffset.Year, dateTi
 271
 272        /// <summary>
 273        /// Adds the given number of business days to the <see cref="DateTimeOffset"/>.
 274        /// </summary>
 275        /// <param name="days">Number of business days to be added.</param>
 276        /// <returns>A <see cref="DateTimeOffset"/> increased by a given number of business days.</returns>
 277        public DateTimeOffset AddBusinessDays(int days)
 278        {
 3279            var sign = Math.Sign(days);
 3280            var unsignedDays = Math.Abs(days);
 12281            for (var i = 0; i < unsignedDays; i++)
 282            {
 283                do
 9284                    dateTimeOffset = dateTimeOffset.AddDays(sign);
 9285                while (dateTimeOffset.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday);
 286            }
 287
 3288            return dateTimeOffset;
 289        }
 290
 291        /// <summary>
 292        /// Subtracts the given number of business days to the <see cref="DateTimeOffset"/>.
 293        /// </summary>
 294        /// <param name="days">Number of business days to be subtracted.</param>
 295        /// <returns>A <see cref="DateTimeOffset"/> increased by a given number of business days.</returns>
 0296        public DateTimeOffset SubtractBusinessDays(int days) => dateTimeOffset.AddBusinessDays(-days);
 297
 298        /// <summary>
 299        /// Determine if a <see cref="DateTimeOffset"/> is in the future.
 300        /// </summary>
 301        /// <returns><c>true</c> if <paramref name="dateTimeOffset"/> is in the future; otherwise <c>false</c>.</returns
 3302        public bool IsInFuture() => dateTimeOffset > DateTimeOffset.Now;
 303
 304        /// <summary>
 305        /// Determine if a <see cref="DateTimeOffset"/> is in the past.
 306        /// </summary>
 307        /// <returns><c>true</c> if <paramref name="dateTimeOffset"/> is in the past; otherwise <c>false</c>.</returns>
 3308        public bool IsInPast() => dateTimeOffset < DateTimeOffset.Now;
 309
 310        /// <summary>
 311        /// Rounds <paramref name="dateTimeOffset"/> to the nearest <see cref="RoundTo"/>.
 312        /// </summary>
 313        /// <returns>The rounded <see cref="DateTimeOffset"/>.</returns>
 314        public DateTimeOffset Round(RoundTo rt)
 315        {
 316            DateTimeOffset rounded;
 317
 318            switch (rt)
 319            {
 320                case RoundTo.Second:
 321                    {
 0322                        rounded = new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Hour
 0323                        if (dateTimeOffset.Millisecond >= 500)
 0324                            rounded = rounded.AddSeconds(1);
 0325                        break;
 326                    }
 327
 328                case RoundTo.Minute:
 329                    {
 3330                        rounded = new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Hour
 3331                        if (dateTimeOffset.Second >= 30)
 3332                            rounded = rounded.AddMinutes(1);
 3333                        break;
 334                    }
 335
 336                case RoundTo.Hour:
 337                    {
 0338                        rounded = new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, dateTimeOffset.Hour
 0339                        if (dateTimeOffset.Minute >= 30)
 0340                            rounded = rounded.AddHours(1);
 0341                        break;
 342                    }
 343
 344                case RoundTo.Day:
 345                    {
 0346                        rounded = new(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 0, 0, 0, dateTimeOf
 0347                        if (dateTimeOffset.Hour >= 12)
 0348                            rounded = rounded.AddDays(1);
 0349                        break;
 350                    }
 351
 352                default:
 353                    {
 0354                        throw new ArgumentOutOfRangeException(nameof(rt));
 355                    }
 356            }
 357
 3358            return rounded;
 359        }
 360
 361        /// <summary>
 362        /// Returns a DateTimeOffset adjusted to the beginning of the week.
 363        /// </summary>
 364        /// <returns>A DateTimeOffset instance adjusted to the beginning of the current week.</returns>
 365        /// <remarks>the beginning of the week is controlled by the current Culture.</remarks>
 366        public DateTimeOffset FirstDayOfWeek()
 367        {
 6368            var currentCulture = CultureInfo.CurrentCulture;
 6369            var firstDayOfWeek = currentCulture.DateTimeFormat.FirstDayOfWeek;
 6370            var offset = dateTimeOffset.DayOfWeek < firstDayOfWeek ? 7 : 0;
 6371            var numberOfDaysSinceBeginningOfTheWeek = dateTimeOffset.DayOfWeek + offset - firstDayOfWeek;
 372
 6373            return dateTimeOffset.AddDays(-numberOfDaysSinceBeginningOfTheWeek);
 374        }
 375
 376        /// <summary>
 377        /// Returns the first day of the year keeping the time component intact. Eg, 2011-02-04T06:40:20.005 => 2011-01-
 378        /// </summary>
 3379        public DateTimeOffset FirstDayOfYear() => dateTimeOffset.SetDate(dateTimeOffset.Year, 1, 1);
 380
 381        /// <summary>
 382        /// Returns the last day of the week keeping the time component intact. Eg, 2011-12-24T06:40:20.005 => 2011-12-2
 383        /// </summary>
 3384        public DateTimeOffset LastDayOfWeek() => dateTimeOffset.FirstDayOfWeek().AddDays(6);
 385
 386        /// <summary>
 387        /// Returns the last day of the year keeping the time component intact. Eg, 2011-12-24T06:40:20.005 => 2011-12-3
 388        /// </summary>
 3389        public DateTimeOffset LastDayOfYear() => dateTimeOffset.SetDate(dateTimeOffset.Year, 12, 31);
 390
 391        /// <summary>
 392        /// Returns the previous month keeping the time component intact. Eg, 2010-01-20T06:40:20.005 => 2009-12-20T06:4
 393        /// If the previous month doesn't have that many days the last day of the previous month is used. Eg, 2009-03-31
 394        /// </summary>
 395        public DateTimeOffset PreviousMonth()
 396        {
 3397            var year = dateTimeOffset.Month == 1 ? dateTimeOffset.Year - 1 : dateTimeOffset.Year;
 398
 3399            var month = dateTimeOffset.Month == 1 ? 12 : dateTimeOffset.Month - 1;
 400
 3401            var firstDayOfPreviousMonth = dateTimeOffset.SetDate(year, month, 1);
 402
 3403            var lastDayOfPreviousMonth = firstDayOfPreviousMonth.LastDayOfMonth().Day;
 404
 3405            var day = dateTimeOffset.Day > lastDayOfPreviousMonth ? lastDayOfPreviousMonth : dateTimeOffset.Day;
 406
 3407            return firstDayOfPreviousMonth.SetDay(day);
 408        }
 409
 410        /// <summary>
 411        /// Returns the next month keeping the time component intact. Eg, 2012-12-05T06:40:20.005 => 2013-01-05T06:40:20
 412        /// If the next month doesn't have that many days the last day of the next month is used. Eg, 2013-01-31T06:40:2
 413        /// </summary>
 414        public DateTimeOffset NextMonth()
 415        {
 3416            var year = dateTimeOffset.Month == 12 ? dateTimeOffset.Year + 1 : dateTimeOffset.Year;
 417
 3418            var month = dateTimeOffset.Month == 12 ? 1 : dateTimeOffset.Month + 1;
 419
 3420            var firstDayOfNextMonth = dateTimeOffset.SetDate(year, month, 1);
 421
 3422            var lastDayOfPreviousMonth = firstDayOfNextMonth.LastDayOfMonth().Day;
 423
 3424            var day = dateTimeOffset.Day > lastDayOfPreviousMonth ? lastDayOfPreviousMonth : dateTimeOffset.Day;
 425
 3426            return firstDayOfNextMonth.SetDay(day);
 427        }
 428
 429        /// <summary>
 430        /// Determines whether the specified <see cref="DateTimeOffset"/> value is exactly the same day (day + month + y
 431        /// </summary>
 432        /// <param name="date">Value to compare with.</param>
 433        /// <returns>
 434        ///     <c>true</c> if the specified date is exactly the same year then current; otherwise, <c>false</c>.
 435        /// </returns>
 3436        public bool SameDay(DateTimeOffset date) => dateTimeOffset.Date == date.Date;
 437
 438        /// <summary>
 439        /// Determines whether the specified <see cref="DateTimeOffset"/> value is exactly the same month (month + year)
 440        /// </summary>
 441        /// <param name="date">Value to compare with.</param>
 442        /// <returns>
 443        ///     <c>true</c> if the specified date is exactly the same month and year then current; otherwise, <c>false</
 444        /// </returns>
 3445        public bool SameMonth(DateTimeOffset date) => dateTimeOffset.Month == date.Month && dateTimeOffset.Year == date.
 446
 447        /// <summary>
 448        /// Determines whether the specified <see cref="DateTimeOffset"/> value is exactly the same year then current. E
 449        /// </summary>
 450        /// <param name="date">Value to compare with.</param>
 451        /// <returns>
 452        ///     <c>true</c> if the specified date is exactly the same date then current; otherwise, <c>false</c>.
 453        /// </returns>
 3454        public bool SameYear(DateTimeOffset date) => dateTimeOffset.Year == date.Year;
 455    }
 456}
 457

Methods/Properties

AddFluentTimeSpan(System.DateTimeOffset,MyNet.Primitives.Temporal.FluentTimeSpan)
SubtractFluentTimeSpan(System.DateTimeOffset,MyNet.Primitives.Temporal.FluentTimeSpan)
EndOfDay(System.DateTimeOffset)
BeginningOfDay(System.DateTimeOffset)
NextYear(System.DateTimeOffset)
PreviousYear(System.DateTimeOffset)
NextDay(System.DateTimeOffset)
PreviousDay(System.DateTimeOffset)
Next(System.DateTimeOffset,System.DayOfWeek)
Previous(System.DateTimeOffset,System.DayOfWeek)
WeekAfter(System.DateTimeOffset)
WeekEarlier(System.DateTimeOffset)
IncreaseTime(System.DateTimeOffset,System.TimeSpan)
DecreaseTime(System.DateTimeOffset,System.TimeSpan)
SetTime(System.DateTimeOffset,System.Int32)
SetTime(System.DateTimeOffset,System.Int32,System.Int32)
SetTime(System.DateTimeOffset,System.Int32,System.Int32,System.Int32)
SetTime(System.DateTimeOffset,System.Int32,System.Int32,System.Int32,System.Int32)
SetHour(System.DateTimeOffset,System.Int32)
SetMinute(System.DateTimeOffset,System.Int32)
SetSecond(System.DateTimeOffset,System.Int32)
SetMillisecond(System.DateTimeOffset,System.Int32)
Midnight(System.DateTimeOffset)
Noon(System.DateTimeOffset)
SetDate(System.DateTimeOffset,System.Int32)
SetDate(System.DateTimeOffset,System.Int32,System.Int32)
SetDate(System.DateTimeOffset,System.Int32,System.Int32,System.Int32)
SetYear(System.DateTimeOffset,System.Int32)
SetMonth(System.DateTimeOffset,System.Int32)
SetDay(System.DateTimeOffset,System.Int32)
At(System.DateTimeOffset,System.Int32,System.Int32)
At(System.DateTimeOffset,System.Int32,System.Int32,System.Int32)
At(System.DateTimeOffset,System.Int32,System.Int32,System.Int32,System.Int32)
FirstDayOfQuarter(System.DateTimeOffset)
FirstDayOfMonth(System.DateTimeOffset)
LastDayOfQuarter(System.DateTimeOffset)
LastDayOfMonth(System.DateTimeOffset)
AddBusinessDays(System.DateTimeOffset,System.Int32)
SubtractBusinessDays(System.DateTimeOffset,System.Int32)
IsInFuture(System.DateTimeOffset)
IsInPast(System.DateTimeOffset)
Round(System.DateTimeOffset,MyNet.Primitives.Temporal.RoundTo)
FirstDayOfWeek(System.DateTimeOffset)
FirstDayOfYear(System.DateTimeOffset)
LastDayOfWeek(System.DateTimeOffset)
LastDayOfYear(System.DateTimeOffset)
PreviousMonth(System.DateTimeOffset)
NextMonth(System.DateTimeOffset)
SameDay(System.DateTimeOffset,System.DateTimeOffset)
SameMonth(System.DateTimeOffset,System.DateTimeOffset)
SameYear(System.DateTimeOffset,System.DateTimeOffset)