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); }
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))); }
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); }