У меня есть требование, где я говорю 2 параметра, bucketDelta и время начала, и мне нужно вычислить ближайший временной интервал в шагах bucketDelta, который меньше заданного времени. (звучит достаточно запутанно? Вот пример)
скажем, ведроДельта
15 минут и мое время 13 сентября 19:05 - возвращение 13 сентября 19:00
15 минут, а мое время - 13 сентября, 19:17 - возвращение 13 сентября, 19:15.
15 минут, а мое время - 13 сентября, 19:35 - возвращение 13 сентября, 19:30.
...
30 минут, а мое время 13 сентября 19:05 - возвращение 13 сентября 19:00
30 минут, а мое время - 13 сентября, 19:17 - возвращение 13 сентября, 19:00.
30 минут, а мое время - 13 сентября, 19:35 - возвращение 13 сентября, 19:30
...
60 минут и мое время 13 сентября 19:05 - возвращение 13 сентября 19:00
60 минут, а мое время 13 сентября, 19:35 - возвращение 13 сентября, 19:00.
60 минут, а мое время - 13 сентября, 19:55 - возвращение 13 сентября, 19:00
24 часа, а мое время 13 сентября 19:05 - возвращение 13 сентября в 12:00
24 часа, а мое время 13 сентября в 9:05 - возвращение 13 сентября в 12:00
..
Вот логика, которая у меня есть для этого, но я не слишком доволен миллионом Ифс. Есть ли лучший способ сделать это?
if (bucketDelta == TimeSpan.FromSeconds(900)) {
if (bucketStop.Minute > 0 && bucketStop.Minute < 15)
{
minute = bucketStop.Minute;
}
else if (bucketStop.Minute > 15 && bucketStop.Minute < 30)
{
minute = bucketStop.Minute - 15;
}
else if (bucketStop.Minute > 30 && bucketStop.Minute < 45)
{
minute = bucketStop.Minute - 30;
}
else if (bucketStop.Minute > 45 && bucketStop.Minute < 60)
{
minute = bucketStop.Minute - 45;
}
}else if(bucketDelta == TimeSpan.FromSeconds(1800)) {
if (bucketStop.Minute > 0 && bucketStop.Minute < 30)
{
minute = bucketStop.Minute;
}
else if (bucketStop.Minute > 30 && bucketStop.Minute < 60)
{
minute = bucketStop.Minute - 30;
}
} else if(bucketDelta == TimeSpan.FromSeconds(3600))
{
if (bucketStop.Minute > 0 && bucketStop.Minute < 60)
{
minute = bucketStop.Minute;
}
}
else if (bucketDelta == TimeSpan.FromSeconds(86400))
{
if (bucketStop.Hour > 0 && bucketStop.Hour < 24)
{
minute = (bucketStop.Hour * 60);
}
}
bucketStop = bucketStop.AddMinutes(-1 * minute);