मैं चार्टिंग एप्लिकेशन के लिए निकटतम अंतराल के लिए तारीखों / समय को गोल करना चाहता हूं। मैं एक विस्तार विधि हस्ताक्षर पसंद करता हूं, ताकि किसी भी स्तर की सटीकता के लिए गोलाई को ठीक किया जा सके:
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));
...
चीयर्स!