public static long GetDurationInSeconds(
            string durationStr,
            long secondsPerDay,
            long secondsPerWeek,
            DurationVariant defaultUnit)
        {
            long totalSeconds = 0;

            if (durationStr == null || string.IsNullOrWhiteSpace(durationStr.Trim()))
            {
                return(0);
            }

            durationStr = durationStr.Trim().ToLower();

            int multiplier = durationStr.StartsWith("-") ? -1 : 1;

            string[] st = durationStr.Split(' ');

            foreach (string word in st)
            {
                totalSeconds += GetSecondsPerDuration(word, secondsPerDay, secondsPerWeek, defaultUnit);
            }

            return(multiplier * totalSeconds);
        }
Ejemplo n.º 2
0
        public static long GetSeconds(this DurationVariant duration, long secondsPerDay, long secondsPerWeek)
        {
            switch (duration)
            {
            case DurationVariant.SECOND:
            case DurationVariant.MINUTE:
            case DurationVariant.HOUR:
                return((long)duration);

            case DurationVariant.DAY:
                return(secondsPerDay);

            case DurationVariant.WEEK:
                return(secondsPerWeek);

            case DurationVariant.MONTH:
                return(31 * secondsPerDay);

            case DurationVariant.YEAR:
                return(52 * secondsPerWeek);

            default:
                return((long)duration);
            }
        }
 public static TimeSpan GetDurationInTimeSpan(
     string durationStr,
     TimeSpan dayTimeSpan,
     TimeSpan weekTimeSpan,
     DurationVariant defaultUnit)
 {
     return(TimeSpan.FromSeconds(
                GetDurationInSeconds(
                    durationStr,
                    (long)dayTimeSpan.TotalSeconds,
                    (long)weekTimeSpan.TotalSeconds,
                    defaultUnit)));
 }
Ejemplo n.º 4
0
        public static string ValidateDurationUnit(string durationString, DurationVariant duration)
        {
            if (durationString.Length > 1)
            {
                string singular = duration.ToString().ToLower();
                string plural   = duration.ToString().ToLower() + "s";

                if (durationString.Contains(plural))
                {
                    return(durationString.Substring(durationString.IndexOf(plural)));
                }
                else if (durationString.Contains(singular))
                {
                    return(durationString.Substring(durationString.IndexOf(singular)));
                }
                else
                {
                    throw new Exception("Not a valid durationString string");
                }
            }

            return(durationString.Substring(1));
        }
        private static long GetSecondsPerDuration(
            string duration,
            long secondsPerDay,
            long secondsPerWeek,
            DurationVariant defaultUnit)
        {
            long timePerUnit = 0;

            try
            {
                timePerUnit = long.Parse(duration.Trim()) * defaultUnit.GetSeconds(secondsPerDay, secondsPerWeek);
            }
            catch (Exception)
            {
                Match m = DURATION_PATTERN.Match(duration);

                if (m.Success)
                {
                    string numberAsString = m.Groups[1].Value;
                    int    number         = int.Parse(numberAsString);

                    string durationUnitAsString = m.Groups[2].Value;

                    long unit    = GetSecondsFromDurationUnit(durationUnitAsString, secondsPerDay, secondsPerWeek);
                    long seconds = number * unit;

                    timePerUnit = seconds;
                }
                else
                {
                    throw new Exception("Unable to parse duration string: " + duration);
                }
            }

            return(timePerUnit);
        }