public static string Format( this TimeSpan span, DateTimeInterval includeIntervals, byte maxDepth, IStringLocalizer localizer = null) { string result = String.Empty; var ticksRemainder = span.Ticks; byte depth = 0; foreach (Enum flag in includeIntervals.GetFlags(SortOrder.Descending)) { var interval = (DateTimeInterval)flag; if (depth < maxDepth) { var wholeIntervals = ticksRemainder.GetWholeInterval(interval, out ticksRemainder); if (wholeIntervals > 0) { depth += 1; var term = interval.GetAppropriateSingularOrPluralTerm(wholeIntervals, localizer); result = result.AppendIfRequired(" ", string.Format("{0} {1}", wholeIntervals, term)); } } else { break; } } return(result); }
private static string Format( DateTimeInterval interval, long ticks, out long ticksRemainder, IStringLocalizer localizer) { if (interval.GetFlags().Count() > 1) { throw new ArgumentException( string.Format("This function works with no more than one DateTimeInterval flag." + "The parameter passed was {0}, which is {1} flags", interval, interval.GetFlags().Count()), nameof(interval)); } var wholeIntervals = ticks.GetWholeInterval(interval, out ticksRemainder); var term = interval.GetAppropriateSingularOrPluralTerm(wholeIntervals, localizer); return(string.Format("{0} {1}", wholeIntervals, term)); }
internal static bool HasAllTheseIntervals(this long ticks, DateTimeInterval intervals) { bool result = true; foreach (Enum flag in intervals.GetFlags(SortOrder.Descending)) { result &= ticks.HasInterval((DateTimeInterval)flag); } return(result); }