Exemplo n.º 1
0
        private static IAge CreateAge(AgeUnits unit, int first, int second)
        {
            switch (unit)
            {
            case AgeUnits.Year:
            {
                var age = new Age(first, InvalidAge, InvalidAge, InvalidAge, AgeUnits.Year);
                return(age);
            }

            case AgeUnits.YearAndMonth:
            {
                var age = new Age(first, second, InvalidAge, InvalidAge, AgeUnits.YearAndMonth);
                return(age);
            }

            case AgeUnits.MonthAndWeek:
            {
                var age = new Age(InvalidAge, first, second, InvalidAge, AgeUnits.MonthAndWeek);
                return(age);
            }

            case AgeUnits.WeekAndDay:
            {
                var age = new Age(InvalidAge, InvalidAge, first, second, AgeUnits.WeekAndDay);
                return(age);
            }
            }

            return(null);
        }
Exemplo n.º 2
0
        public void AgeWithUnits_ShouldSupportCalculatingAgeInSpecificUnits(AgeUnits units)
        {
            //Arrange
            var date = DateTime.Now;

            //Act
            var age = date.Age(units);

            //Assert
            age.GetType().ShouldBe(typeof(int));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Calculate age of object in certain units.
        /// </summary>
        /// <param name="startDate">Start date.</param>
        /// <param name="units">Units of age measurement.</param>
        /// <returns>Age in specific units.</returns>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        public static int Age(this DateTime startDate, AgeUnits units)
        {
            if (DateTime.Now < startDate)
            {
                throw new ArgumentOutOfRangeException(nameof(startDate));
            }

            var zeroTime = new DateTime(1, 1, 1);
            var span     = zeroTime + (DateTime.Now - startDate);

            return(units switch
            {
                AgeUnits.Year => span.Year - 1,
                AgeUnits.Month => span.Month - 1,
                AgeUnits.Week => span.Day % 7 - 1,
                AgeUnits.Day => span.Day - 1,
                AgeUnits.Hour => span.Hour - 1,
                AgeUnits.Minute => span.Minute - 1,
                AgeUnits.Second => span.Second - 1,
                _ => throw new ArgumentException(nameof(startDate)),
            });
Exemplo n.º 4
0
 public Age(int value, AgeUnits ageUnits)
 {
     Value = value;
     Units = ageUnits;
 }