You should return a TimeSpan
instead of a string
. Here's how I would do it:
static TimeSpan GetTime(double percentage, TimeSpan startTime, TimeSpan endTime)
{
var percentageInTicks = (long)((endTime - startTime).Ticks * percentage);
return startTime.Add(TimeSpan.FromTicks(percentageInTicks));
}
Usage:
TimeSpan startTime = new TimeSpan(4, 0, 0);
TimeSpan endTime = new TimeSpan(16, 0, 0);
double[] percentages = new[] { 0, 0.5, 1 };
foreach (double percentage in percentages)
{
var result = GetTime(percentage, startTime, endTime);
Console.WriteLine(result.ToString());
}
Output:
04:00:00
10:00:00
16:00:00
Edit: You can do basically the same thing with DateTime
if you wish:
static TimeSpan GetTime(double percentage, DateTime startDate, DateTime endDate)
{
var percentageInTicks = (long)((endDate - startDate).Ticks * percentage);
return startDate.TimeOfDay.Add(TimeSpan.FromTicks(percentageInTicks));
}
Usage:
DateTime startDate = DateTime.Today.Add(new TimeSpan(4, 0, 0));
DateTime endDate = DateTime.Today.Add(new TimeSpan(16, 0, 0));
double[] percentages = new[] { 0, 0.5, 1 };
foreach (double percentage in percentages)
{
var result = GetTime(percentage, startDate, startDate);
Console.WriteLine(result.ToString());
}