示例#1
0
        protected DateTimeOffset?FromRelationAmountTime(string relation, int amount, string size, DateTimeOffset relativeBaseTime, bool isUpperLimit)
        {
            relation = relation.ToLower();
            size     = size.ToLower();
            if (amount < 1)
            {
                throw new ArgumentException("Time amount can't be 0.");
            }
            TimeSpan intervalSpan = Helper.GetTimeSpanFromName(size);

            if (intervalSpan != TimeSpan.Zero)
            {
                var totalSpan = TimeSpan.FromTicks(intervalSpan.Ticks * amount);
                switch (relation)
                {
                case "ago":
                    return(isUpperLimit ? relativeBaseTime.SafeSubtract(totalSpan).Ceiling(intervalSpan).SubtractMilliseconds(1) : relativeBaseTime.SafeSubtract(totalSpan).Floor(intervalSpan));

                case "from now":
                    return(isUpperLimit ? relativeBaseTime.SafeAdd(totalSpan).Ceiling(intervalSpan).SubtractMilliseconds(1) : relativeBaseTime.SafeAdd(totalSpan).Floor(intervalSpan));
                }
            }
            else if (size == "week" || size == "weeks")
            {
                switch (relation)
                {
                case "ago":
                    return(isUpperLimit ? relativeBaseTime.SubtractWeeks(amount).EndOfDay() : relativeBaseTime.SubtractWeeks(amount).StartOfDay());

                case "from now":
                    return(isUpperLimit ? relativeBaseTime.AddWeeks(amount).EndOfDay() : relativeBaseTime.AddWeeks(amount).StartOfDay());
                }
            }
            else if (size == "month" || size == "months")
            {
                switch (relation)
                {
                case "ago":
                    return(isUpperLimit ? relativeBaseTime.SubtractMonths(amount).EndOfDay() : relativeBaseTime.SubtractMonths(amount).StartOfDay());

                case "from now":
                    return(isUpperLimit ? relativeBaseTime.AddMonths(amount).EndOfDay() : relativeBaseTime.AddMonths(amount).StartOfDay());
                }
            }
            else if (size == "year" || size == "years")
            {
                switch (relation)
                {
                case "ago":
                    return(isUpperLimit ? relativeBaseTime.SubtractYears(amount).EndOfDay() : relativeBaseTime.SubtractYears(amount).StartOfDay());

                case "from now":
                    return(isUpperLimit ? relativeBaseTime.AddYears(amount).EndOfDay() : relativeBaseTime.AddYears(amount).StartOfDay());
                }
            }

            return(null);
        }
 public void AddWeeks()
 {
     var date = new DateTimeOffset(2013, 7, 26, 0, 0, 0, DateTimeOffset.Now.Offset);
     Assert.AreEqual(new DateTimeOffset(2013, 8, 9, 0, 0, 0, DateTimeOffset.Now.Offset), date.AddWeeks(2));
     Assert.AreEqual(new DateTimeOffset(2013, 7, 12, 0, 0, 0, DateTimeOffset.Now.Offset), date.AddWeeks(-2));
 }
 public static DateTimeOffset NextWeek(this DateTimeOffset date)
 {
     return(date.AddWeeks(1));
 }
 public static DateTimeOffset SubtractWeeks(this DateTimeOffset dateTimeOffset, double weeks)
 {
     return(dateTimeOffset.AddWeeks(-weeks));
 }