public static DateTime Round(this DateTime d, RoundTo rt) { DateTime dtRounded = new DateTime(); switch (rt) { case RoundTo.Second: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second); if (d.Millisecond >= 500) dtRounded = dtRounded.AddSeconds(1); break; case RoundTo.Minute: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0); if (d.Second >= 30) dtRounded = dtRounded.AddMinutes(1); break; case RoundTo.Hour: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, 0, 0); if (d.Minute >= 30) dtRounded = dtRounded.AddHours(1); break; case RoundTo.Day: dtRounded = new DateTime(d.Year, d.Month, d.Day, 0, 0, 0); if (d.Hour >= 12) dtRounded = dtRounded.AddDays(1); break; } return dtRounded; }
/// <summary> /// Rounds a value to the nearest discrete value. /// </summary> /// <param name="d"></param> /// <param name="to"></param> /// <returns></returns> public static DateTime Round(this DateTime d, RoundTo to) { var floor = Floor(d, to); if (to == RoundTo.Second && d.Millisecond >= 500) { return(floor.AddSeconds(1)); } if (to == RoundTo.Minute && d.Second >= 30) { return(floor.AddMinutes(1)); } if (to == RoundTo.Hour && d.Minute >= 30) { return(floor.AddHours(1)); } if (to == RoundTo.Day && d.Hour >= 12) { return(floor.AddDays(1)); } if (to == RoundTo.Month && d.Day >= DateTime.DaysInMonth(d.Year, d.Month) / 2) { return(floor.AddMonths(1)); } return(d); }
/// <summary> /// Round /// </summary> /// <param name="dateTime"></param> /// <param name="rt"></param> /// <returns></returns> /// <exception cref="ArgumentOutOfRangeException"></exception> public static DateTimeOffset Round(this DateTimeOffset dateTime, RoundTo rt) { DateTimeOffset rounded; switch (rt) { case RoundTo.Second: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Offset); if (dateTime.Millisecond >= 500) { rounded = rounded.AddSeconds(1); } break; } case RoundTo.Minute: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0, dateTime.Offset); if (dateTime.Second >= 30) { rounded = rounded.AddMinutes(1); } break; } case RoundTo.Hour: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0, dateTime.Offset); if (dateTime.Minute >= 30) { rounded = rounded.AddHours(1); } break; } case RoundTo.Day: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0, dateTime.Offset); if (dateTime.Hour >= 12) { rounded = rounded.AddDays(1); } break; } default: { throw new ArgumentOutOfRangeException("rt"); } } return(rounded); }
/// <summary> /// Rounds <paramref name="timeSpan"/> to the nearest <see cref="RoundTo"/>. /// </summary> /// <returns>The rounded <see cref="TimeSpan"/>.</returns> public static TimeSpan Round(this TimeSpan timeSpan, RoundTo rt) { TimeSpan rounded; switch (rt) { case RoundTo.Second: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds); if (timeSpan.Milliseconds >= 500) { rounded = rounded + 1.Seconds(); } break; } case RoundTo.Minute: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, 0); if (timeSpan.Seconds >= 30) { rounded = rounded + 1.Minutes(); } break; } case RoundTo.Hour: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, 0, 0); if (timeSpan.Minutes >= 30) { rounded = rounded + 1.Hours(); } break; } case RoundTo.Day: { rounded = new TimeSpan(timeSpan.Days, 0, 0, 0); if (timeSpan.Hours >= 12) { rounded = rounded + 1.Days(); } break; } default: { throw new NotImplementedException(); } } return(rounded); }
public override void Reset() { base.Reset(); fromValue = null; toValue = null; intVariable = null; roundTo = RoundTo.Nearest; finishInNextStep = false; }
public static DateTime Round(this DateTime dateTime, RoundTo rt) { DateTime rounded; switch (rt) { case RoundTo.Second: { rounded = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second); if (dateTime.Millisecond >= 500) { rounded = rounded.AddSeconds(1); } break; } case RoundTo.Minute: { rounded = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0); if (dateTime.Second >= 30) { rounded = rounded.AddMinutes(1); } break; } case RoundTo.Hour: { rounded = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0); if (dateTime.Minute >= 30) { rounded = rounded.AddHours(1); } break; } case RoundTo.Day: { rounded = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0); if (dateTime.Hour >= 12) { rounded = rounded.AddDays(1); } break; } default: { throw new NotImplementedException(); } } return(rounded); }
/// <summary> /// Returns the largest discrete value less than or equal to the specified value. /// </summary> /// <param name="d"></param> /// <param name="to"></param> /// <returns></returns> public static DateTime Floor(this DateTime d, RoundTo to) { if (to == RoundTo.Second) { return(new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second, d.Kind)); } if (to == RoundTo.Minute) { return(new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0, d.Kind)); } if (to == RoundTo.Hour) { return(new DateTime(d.Year, d.Month, d.Day, d.Hour, 0, 0, d.Kind)); } if (to == RoundTo.Day) { return(new DateTime(d.Year, d.Month, d.Day, 0, 0, 0, d.Kind)); } if (to == RoundTo.Month) { return(new DateTime(d.Year, d.Month, 1, 0, 0, 0, d.Kind)); } return(d); }
public static DateTimeOffset Round(this DateTimeOffset dateTime, RoundTo rt) { DateTimeOffset rounded; switch (rt) { case RoundTo.Second: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second,dateTime.Offset); if (dateTime.Millisecond >= 500) { rounded = rounded.AddSeconds(1); } break; } case RoundTo.Minute: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, 0,dateTime.Offset); if (dateTime.Second >= 30) { rounded = rounded.AddMinutes(1); } break; } case RoundTo.Hour: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0,dateTime.Offset); if (dateTime.Minute >= 30) { rounded = rounded.AddHours(1); } break; } case RoundTo.Day: { rounded = new DateTimeOffset(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0,dateTime.Offset); if (dateTime.Hour >= 12) { rounded = rounded.AddDays(1); } break; } default: { throw new ArgumentOutOfRangeException("rt"); } } return rounded; }
public RoundToTransform(IContext context, RoundTo roundTo) : base(context, "object") { if (IsNotReceivingNumber()) { return; } if (!context.Operation.Value.IsNumeric()) { Error($"The {context.Operation.Method} transform requires a numeric value."); Run = false; return; } var input = SingleInput(); if (Received() == "double") { var by = Convert.ToDouble(context.Operation.Value); switch (roundTo) { case RoundTo.Up: _transform = (r) => Math.Ceiling((double)r[input] / by) * by; break; case RoundTo.Down: _transform = (r) => Math.Floor((double)r[input] / by) * by; break; default: _transform = (r) => Math.Round((double)r[input] / by) * by; break; } Returns = "double"; } else { var by = Convert.ToDecimal(context.Operation.Value); if (Received() == "decimal") { switch (roundTo) { case RoundTo.Up: _transform = (r) => Math.Ceiling((decimal)r[input] / by) * by; break; case RoundTo.Down: _transform = (r) => Math.Floor((decimal)r[input] / by) * by; break; default: _transform = (r) => Math.Round((decimal)r[input] / by) * by; break; } Returns = "decimal"; } else { switch (roundTo) { case RoundTo.Up: _transform = (r) => context.Field.Convert(Math.Ceiling(Convert.ToDecimal(r[input]) / by) * by); break; case RoundTo.Down: _transform = (r) => context.Field.Convert(Math.Floor(Convert.ToDecimal(r[input]) / by) * by); break; default: _transform = (r) => context.Field.Convert(Math.Round(Convert.ToDecimal(r[input]) / by) * by); Returns = context.Field.Type; break; } } } }
public static TimeSpan Round(this TimeSpan timeSpan, RoundTo rt) { TimeSpan rounded; switch (rt) { case RoundTo.Second: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds); if (timeSpan.Milliseconds >= 500) { rounded = rounded + 1.Seconds(); } break; } case RoundTo.Minute: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, timeSpan.Minutes, 0); if (timeSpan.Seconds >= 30) { rounded = rounded + 1.Minutes(); } break; } case RoundTo.Hour: { rounded = new TimeSpan(timeSpan.Days, timeSpan.Hours, 0, 0); if (timeSpan.Minutes >= 30) { rounded = rounded + 1.Hours(); } break; } case RoundTo.Day: { rounded = new TimeSpan(timeSpan.Days, 0, 0, 0); if (timeSpan.Hours >= 12) { rounded = rounded + 1.Days(); } break; } default: { throw new NotImplementedException(); } } return rounded; }
public void NaturalDate_ParsesTextValues_Always(string input, LocalDate expectedDate, RoundTo roundTo) { var naturalDateAttribute = new NaturalDateAttribute(roundTo); var result = naturalDateAttribute.Transform(null, input); result.Should().Be(expectedDate); }
public static DateTime Round(this DateTime d, RoundTo rt) { DateTime dtRounded = new DateTime(); switch (rt) { case RoundTo.Second: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second); if (d.Millisecond >= 500) { dtRounded = dtRounded.AddSeconds(1); } break; case RoundTo.Minute: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0); if (d.Second >= 30) { dtRounded = dtRounded.AddMinutes(1); } break; case RoundTo.MinuteFloor: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0); break; case RoundTo.MinuteCieling: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0); if (d.Second > 0) { dtRounded = dtRounded.AddMinutes(1); } break; case RoundTo.Hour: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, 0, 0); if (d.Minute >= 30) { dtRounded = dtRounded.AddHours(1); } break; case RoundTo.HourFloor: dtRounded = new DateTime(d.Year, d.Month, d.Day, d.Hour, 0, 0); break; case RoundTo.DayFloor: dtRounded = new DateTime(d.Year, d.Month, d.Day, 0, 0, 0); break; case RoundTo.Day: dtRounded = new DateTime(d.Year, d.Month, d.Day, 0, 0, 0); if (d.Hour >= 12) { dtRounded = dtRounded.AddDays(1); } break; case RoundTo.Month: dtRounded = new DateTime(d.Year, d.Month, 1, 0, 0, 0); break; case RoundTo.MonthEnd: dtRounded = new DateTime(d.Year, d.Month, 1, 0, 0, 0).AddMonths(1).AddDays(-1); break; case RoundTo.Week: dtRounded = d.AddDays(-(int)d.DayOfWeek).Date; break; } return(dtRounded); }