Have you ever wanted to give your users some predefined choices for a time span (minutes, hours, etc)? That’s a pretty natural thing to do using language, but not such a natural thing to do using the TimeSpan class in .Net. You could write your own methods to convert from those options into an actual TimeSpan, but you’d likely be using switch statements to tie together the idea of a unit of time to the TimeSpan class.

Instead, I wrote a class called TimeSpanInterval that does the work for you and directly links the natural language idea of a unit of time to the TimeSpan class. The class supports any interval you can define, as long as you can provide delegates for converting to and from the TimeSpan class. I have provided the common ones already as static members of the TimeSpanInterval class.

To go from a TimeSpanInterval to a TimeSpan, just call the ToTimeSpan() method and provide the value representing the number of (seconds, minutes, hours) for the TimeSpan.

TimeSpan tenMinutes = TimeSpanInterval.Minutes.ToTimeSpan(10);

This might not seem all that useful until you put it into the perspective of a user interface. Imagine a ComboBox whose items are the TimeSpanInterval values and bound to a property called SelectedInterval. Also imagine a TextBox bound to a integer property called TimeValue. The user enters “12” in the TextBox and selects “Minutes” from the ComboBox.
timespaninterval-wpf

Without any other information or code, you can get a TimeSpan containing the user’s input. No switch statements or conditional logic required.

TimeSpan tspan = SelectedInterval.ToTimeSpan(TimeValue);

You can also reverse the TimeSpanInterval part of the equation to go from a TimeSpan to a TimeSpanInterval. This is done by calling InferFromTimeSpan(), which uses a “best guess” approach by attempting to find the best unit match for the value of the TimeSpan.

TimeSpanInterval interval = TimeSpanInterval.InferFromTimeSpan(timespan);

The code is hosted on gist.github.com, so give it a try and let me know what you think.