আমার দুটি DateTimeজিনিস আছে: StartDateএবং EndDate। আমি নিশ্চিত করতে চাই StartDateআগে হয় EndDate। এটি সি # তে কীভাবে হয়?
আমার দুটি DateTimeজিনিস আছে: StartDateএবং EndDate। আমি নিশ্চিত করতে চাই StartDateআগে হয় EndDate। এটি সি # তে কীভাবে হয়?
উত্তর:
if (StartDate < EndDate)
// code
আপনি যদি খেজুর চান, সময় না
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
ডেটটাইম সাধারণ তুলনা অপারেটরদের সমর্থন করে।
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
আপনি ওভারলোডেড <বা> অপারেটরগুলি ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ:
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
এটি সম্ভবত খুব দেরি হয়ে গেছে, তবে অন্যান্য লোকদের পক্ষে যারা এই সমস্যায় পড়তে পারে তাদের উপকার করার জন্য, আমি এটির IComparableমতো করে একটি এক্সটেনশন পদ্ধতি ব্যবহার করেছি :
public static class BetweenExtension
{
public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable
{
return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0);
}
}
এই এক্সটেনশন পদ্ধতিটি ব্যবহার করে IComparable পদ্ধতিটিকে আরও জেনেরিক করে তোলে এবং কেবলমাত্র তারিখ নয়, বিভিন্ন ধরণের ডেটা টাইপের সাথে এটি ব্যবহারযোগ্য করে তোলে।
আপনি এটি এর মতো ব্যবহার করবেন:
DateTime start = new DateTime(2015,1,1);
DateTime end = new DateTime(2015,12,31);
DateTime now = new DateTime(2015,8,20);
if(now.IsBetween(start, end))
{
//Your code here
}
আমার একই প্রয়োজনীয়তা ছিল, কিন্তু স্বীকৃত উত্তরটি ব্যবহার করার সময়, এটি আমার ইউনিট পরীক্ষার সমস্ত পূরণ করে নি। আমার জন্য সমস্যাটি তখন যখন আপনার একটি নতুন অবজেক্ট থাকে শুরু এবং শেষের তারিখগুলি সহ এবং আপনাকে সূচনার তারিখটি নির্ধারণ করতে হবে (এই পর্যায়ে আপনার শেষ তারিখের সর্বনিম্ন তারিখের মান 01/01/0001 রয়েছে) - এই সমাধানটি সমস্ত পাস করেছে আমার ইউনিট পরীক্ষা:
public DateTime Start
{
get { return _start; }
set
{
if (_end.Equals(DateTime.MinValue))
{
_start = value;
}
else if (value.Date < _end.Date)
{
_start = value;
}
else
{
throw new ArgumentException("Start date must be before the End date.");
}
}
}
public DateTime End
{
get { return _end; }
set
{
if (_start.Equals(DateTime.MinValue))
{
_end = value;
}
else if (value.Date > _start.Date)
{
_end = value;
}
else
{
throw new ArgumentException("End date must be after the Start date.");
}
}
}
এটি প্রান্তের ক্ষেত্রে মিস করে না যেখানে শুরু এবং শেষের উভয় তারিখই 01/01/0001 হতে পারে তবে আমি সে সম্পর্কে উদ্বিগ্ন নই।
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
আমি যদি তা রূপান্তর করতে চাই তবে আপনি যদি রূপান্তর করেন D
[Test]
public void ConvertToDateWillHaveTwoDatesEqual()
{
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
Assert.IsTrue(d1 < d2);
DateTime d3 = new DateTime(2008, 1, 1,7,0,0);
DateTime d4 = new DateTime(2008, 1, 1,10,0,0);
Assert.IsTrue(d3 < d4);
Assert.IsFalse(d3.Date < d4.Date);
}