ฉันต้องการปัดเศษวันที่ / เวลาเป็นช่วงเวลาที่ใกล้ที่สุดสำหรับแอปพลิเคชันสร้างแผนภูมิ ฉันต้องการลายเซ็นวิธีการขยายดังต่อไปนี้เพื่อให้การปัดเศษได้รับความแม่นยำทุกระดับ:
static DateTime Round(this DateTime date, TimeSpan span);
แนวคิดก็คือถ้าฉันผ่านไปในช่วงเวลาสิบนาทีมันจะปัดเศษเป็นช่วงสิบนาทีที่ใกล้ที่สุด ฉันไม่สามารถเข้าใจการใช้งานได้และหวังว่าพวกคุณคนหนึ่งจะเคยเขียนหรือใช้สิ่งที่คล้ายกันมาก่อน
ฉันคิดว่าการใช้งานพื้นเพดานหรือที่ใกล้ที่สุดก็ดี
ความคิดใด ๆ ?
แก้ไข: ขอบคุณ @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));
...
ไชโย!