Beispiel #1
0
        /// <summary>
        /// Rounds the specified date time down to the specified units.
        /// </summary>
        /// <example>
        /// (2014-02-12 10:33:24 AM, DateTimeUnits.Minute) => 2014-02-12 10:33:00 AM
        /// </example>
        public static DateTime Floor(this DateTime value, DateTimeUnits units)
        {
            switch (units)
            {
            case DateTimeUnits.Seconds:
                return(new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, value.Second, value.Kind));

            case DateTimeUnits.Minutes:
                return(new DateTime(value.Year, value.Month, value.Day, value.Hour, value.Minute, 0, value.Kind));

            case DateTimeUnits.Hours:
                return(new DateTime(value.Year, value.Month, value.Day, value.Hour, 0, 0, value.Kind));

            case DateTimeUnits.Days:
                return(new DateTime(value.Year, value.Month, value.Day, 0, 0, 0, value.Kind));

            case DateTimeUnits.Weeks:
                return(new DateTime(value.Year, value.Month, value.Day, 0, 0, 0, value.Kind).AddDays(1 - (int)value.DayOfWeek));

            case DateTimeUnits.Months:
                return(new DateTime(value.Year, value.Month, 1, 0, 0, 0, value.Kind));

            case DateTimeUnits.Years:
                return(new DateTime(value.Year, 1, 1, 0, 0, 0, value.Kind));

            default:
                throw new ArgumentOutOfRangeException("units");
            }
        }
Beispiel #2
0
        private static DateTimeRange ParseShort(Match match)
        {
            var quantityStr   = match.Groups["magnitude"].Value;
            var resolutionStr = match.Groups["units"].Value;

            DateTimeUnits units;

            switch (resolutionStr.ToLowerInvariant())
            {
            case "s":
                units = DateTimeUnits.Seconds;
                break;

            case "m":
                units = DateTimeUnits.Minutes;
                break;

            case "h":
                units = DateTimeUnits.Hours;
                break;

            case "d":
                units = DateTimeUnits.Days;
                break;

            case "w":
                units = DateTimeUnits.Weeks;
                break;

            case "n":
                units = DateTimeUnits.Months;
                break;

            case "y":
                units = DateTimeUnits.Years;
                break;

            default:
                throw new FormatException("'" + resolutionStr + "' is not a valid units. specify one of [Seconds, Minutes, Hours, Days, Months, Years].");
            }

            var quantity = double.Parse(quantityStr);

            return(new DateTimeRange(quantity, units));
        }
Beispiel #3
0
 public DateTimeRange(double magnitude, DateTimeUnits units)
     : this()
 {
     this.magnitude = magnitude;
     this.units     = units;
 }