차트 응용 프로그램의 날짜 / 시간을 가장 가까운 간격으로 반올림하고 싶습니다. 모든 수준의 정확성에 대해 반올림을 수행 할 수 있도록 다음과 같은 확장 메서드 서명을 원합니다.
static DateTime Round(this DateTime date, TimeSpan span);
아이디어는 내가 10 분의 시간 범위를 지나면 가장 가까운 10 분 간격으로 반올림된다는 것입니다. 나는 구현에 대해 내 머리를 이해할 수 없으며 당신 중 한 명이 전에 비슷한 것을 작성하거나 사용하기를 바라고 있습니다.
나는 바닥, 천장 또는 가장 가까운 구현이 괜찮다고 생각합니다.
어떤 아이디어?
편집 : @tvanfosson & @ShuggyCoUk 덕분에 구현은 다음과 같습니다.
public static class DateExtensions {
public static DateTime Round(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + (span.Ticks / 2) + 1)/ span.Ticks;
return new DateTime(ticks * span.Ticks);
}
public static DateTime Floor(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks / span.Ticks);
return new DateTime(ticks * span.Ticks);
}
public static DateTime Ceil(this DateTime date, TimeSpan span) {
long ticks = (date.Ticks + span.Ticks - 1) / span.Ticks;
return new DateTime(ticks * span.Ticks);
}
}
그리고 이렇게 불립니다 :
DateTime nearestHour = DateTime.Now.Round(new TimeSpan(1,0,0));
DateTime minuteCeiling = DateTime.Now.Ceil(new TimeSpan(0,1,0));
DateTime weekFloor = DateTime.Now.Floor(new TimeSpan(7,0,0,0));
...
건배!
1
여기에있는 구현 중 일부도 도움이 될 수 있습니다. stackoverflow.com/questions/766626/…
—
Matt Hamilton
새로 생성 된 날짜에 원래 DateTimeKind를 추가하는 것을 잊지 마십시오. 예 : new DateTime (ticks * span.Ticks, date.Kind);
—
AM