c# - округление значений времени до ближайшей четверти часа
У кого-нибудь есть хороший способ обойти вниз число от 0 до 59 до ближайших 15. Я использую C# 3.5.
Так ...
- 1 будет 0
- 29 будет 15
- 30 будет 30
etc etc.
большое спасибо.
6 ответов
как метод расширения в datetime
public static DateTime RoundDown(this DateTime dateTime)
{
return new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, (dateTime.Minute / 15) * 15, 0);
}
использовать
DateTime date = dateTime.Now.RoundDown();//for example
Я не знаю вызова библиотеки для этого (например .Раунд.(..)), возможно, и метод расширения подойдет?
Я бы пошел на простой оператор IF.
Если скорость является проблемой, попробуйте расширенный оператор switch для каждого значения. Используйте модульные тесты, чтобы увидеть, что быстрее, если это проблема.
чтобы быть полным...
//...
[TestMethod]
public void round_down()
{
Assert.AreEqual(-5.RoundDown(), 0);
Assert.AreEqual(0.RoundDown(), 0);
Assert.AreEqual(1.RoundDown(), 0);
Assert.AreEqual(20.RoundDown(), 15);
Assert.AreEqual(42.RoundDown(), 30);
Assert.AreEqual(48.RoundDown(), 45);
Assert.AreEqual(59.RoundDown(), 45);
Assert.AreEqual(90.RoundDown(), 45);
}
//...
public static class Ext
{
public static int RoundDown(this int val)
{
if (val < 0)
return 0;
if (val < 15)
return 0;
if (val < 30)
return 15;
if (val < 45)
return 30;
return 45;
}
}
вы можете использовать целочисленное деление -
int number = 43;
int newNumber = number / 15;
int rounded = newNumber * 15;