Finding an issue with solution
DateTime(((dt.Ticks + d.Ticks - 1) / d.Ticks) * d.Ticks);
Date
2/2/2021 9:11:30 PM
rounding down to
2/2/2021 9:30:00 PM
.
But I am expecting
2/2/2021 9:00:00 PM
here.
You can try any of the below solutions, both are the same, but for different versions of C#. Please note, these are for 30 min roundup (that is why divided by 15), if need to be 15 mins, you need to add some modifications.
#1.
DateTime RoundUp(DateTime dateTime)
{
var minute = dateTime.Minute;
var retDateTime = dateTime;
switch (minute / 15)
{
case 0:
retDateTime = new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, 0, 0);
break;
case 1:
retDateTime = new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, 30, 0);
break;
case 2:
retDateTime = new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, 30, 0);
break;
case 3:
retDateTime = new DateTime(dateTime.Year, dateTime.Month,
dateTime.Day, dateTime.Hour, 0, 0).AddHours(1);
break;
}
return retDateTime;
}
#2.
DateTime RoundUp(DateTime dateTime)
{
var minute = dateTime.Minute;
var retDateTime = (minute / 15) switch
{
0 => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0),
1 => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 30, 0),
2 => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 30, 0),
3 => new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, 0, 0).AddHours(1),
_ => dateTime
};
return retDateTime;
}