Exemple #1
0
        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);
        }
Exemple #3
0
        /// <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;
		}
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }