আমি কোনও চার্টিং অ্যাপ্লিকেশনের জন্য নিকটতম ব্যবধানে তারিখগুলি / সময়গুলি ঘুরতে চাই। আমি নীচের মতো একটি এক্সটেনশন পদ্ধতির স্বাক্ষর চাই যাতে রাউন্ডিংটি কোনও স্তরের নির্ভুলতার জন্য গ্রহণ করা যায়:
static DateTime Round(this DateTime date, TimeSpan span);
ধারণাটি হ'ল আমি যদি দশ মিনিটের টাইমস্প্যানে পাস করি তবে এটি নিকটতম দশ মিনিটের বিরতিতে চলে যাবে। আমি বাস্তবায়নের আশেপাশে আমার মাথা পেতে পারি না এবং আশা করছি যে আপনারা কেউ এর আগেও এরকম কিছু লিখেছেন বা ব্যবহার করেছেন।
আমি মনে করি কোনও তল, সিলিং বা নিকটতম বাস্তবায়ন ঠিক আছে।
কোন ধারনা?
সম্পাদনা করুন: @ ট্যানফসন এবং @ শুগি কুককে ধন্যবাদ, বাস্তবায়নটি এরকম দেখাচ্ছে:
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));
...
চিয়ার্স!