আজ ডেটটাইম হয় কিনা তা কীভাবে পরীক্ষা করবেন?


110

কোনও ডেটটাইম 'আজ' এসেছে কিনা তা পরীক্ষা করার আরও ভাল কোনও নেট উপায় আছে কি নীচের কোডটি?

if ( newsStory.WhenAdded.Day == DateTime.Now.Day &&
     newsStory.WhenAdded.Month == DateTime.Now.Month &&
     newsStory.WhenAdded.Year == DateTime.Now.Year )
{ 
    // Story happened today
}
else
{ 
    // Story didn't happen today
}

14
আপনি newStory.Date == তারিখের সময়.নাউ. তারিখ
গিলিয়াম

উত্তর:


222
if (newsStory.WhenAdded.Date == DateTime.Today)
{

}
else
{

}

কৌতুক করা উচিত।


3
... যদি নিউজস্টেরি.ডেট সময় ব্যতীত কেবল তারিখের অংশ হয়। ;)
লুসেরো

14
... এটি হ'ল, যদি নিউজস্ট্রিটি ডেটটাইম হয়
স্টিভেমসন

18
ঠিক আছে, ডেটটাইম নেট ফ্রেমওয়ার্ক ক্লাস লাইব্রেরির একটি অংশ, সুতরাং যখন এটি সম্ভব হয় যে ওপি একই নাম ভাগ করে নেওয়ার জন্য তার নিজস্ব ক্লাস তৈরি করেছিল, তখন আপনাকে অবাক করেই জিজ্ঞাসা করা হবে যে তিনি স্ট্যাকওভারফ্লোকে কীভাবে কাস্টম ক্লাস ব্যবহার করবেন তা জিজ্ঞাসা করবেন তিনি তৈরি করেছেন এবং আমাদের কীভাবে এটি কাজ করেছে তা জাদুকরভাবে প্রত্যাশা করে। ;)
ব্রায়ান শ্রথ

2
@ লুসেরো এটি সম্ভব তবে প্রশ্ন শিরোনামটি 'দুটি ডেটটাইমস' পড়ে। ;) আমি অনুমান করি যে সেখান থেকে আমরা সেই অনুপস্থিত প্রকারটি পেয়েছি।
পাইক্রোকুলাস

1
@ হ্যান্সপেটর নমন এটি যৌক্তিক :) ডেটটাইম.এডডহর্স () একটি নতুন ডেটটাইম অবজেক্ট ফিরিয়ে দেয়, এইভাবে কার্যকরভাবে আপনার। টডে অপারেশন বাতিল করে যা সত্যিকার অর্থে কোনও সময় উপাদান নেই।
পাইক্রোকুলাস

29
if( newsStory.Date == DateTime.Today )
{
    // happened today
}

5
আমি যুক্ত করতে চাই, এটি একটি খুব সাধারণ (এবং বাগ স্পট করা শক্ত) - কেবলমাত্র ডেটটাইমকে একটি ডেটটাইম.টোডের সাথে তুলনা করে।
জেএল।


14

আমার সমাধান:

private bool IsTheSameDay(DateTime date1, DateTime date2)
{
    return (date1.Year == date2.Year && date1.DayOfYear == date2.DayOfYear);
}

7

নিউজস্ট্রি যদি একটি ডেটটাইমও ব্যবহার করে থাকে তবে কেবল তারিখের সম্পত্তিটির তুলনা করুন এবং আপনি শেষ করেছেন।

যাইহোক, এটি "আজ" আসলে কী বোঝায় তা নির্ভর করে। মধ্যরাতের সামান্য কিছু আগে পোস্ট করা হলে অল্প সময়ের পরে এটি "পুরানো" হয়ে যাবে। সুতরাং সম্ভবত সঠিক গল্পের তারিখটি (সময় সহ, সর্বোপরি ইউটিসি সহ) রাখা ভাল এবং 24 ঘন্টা (বা যা কিছু) কম হয়েছে তা যাচাই করে নেওয়া ভাল, কোনটি সরল (তারিখগুলি বিয়োগ করা যেতে পারে, যা আপনাকে টোটাল ঘন্টা সহ একটি টাইমস্প্যান দেয় বা টোটালডিজ সম্পত্তি)।


5

আপনি একটি ডেটটাইম সম্প্রসারণ পদ্ধতি প্রয়োগ করতে পারেন।

আপনার এক্সটেনশন পদ্ধতিগুলির জন্য নতুন শ্রেণি তৈরি করুন:

namespace ExtensionMethods
{
    public static class ExtensionMethods
    {
        public static bool IsSameDay( this DateTime datetime1, DateTime datetime2 )
        {
            return datetime1.Year == datetime2.Year 
                && datetime1.Month == datetime2.Month 
                && datetime1.Day == datetime2.Day;
        }
    }
}

এবং এখন, আপনার কোডের যে কোনও জায়গায়, আপনি কোথায় এই পরীক্ষাটি করতে চান, আপনার ব্যবহারটি অন্তর্ভুক্ত করা উচিত:

using ExtensionMethods;

এবং তারপরে, এক্সটেনশন পদ্ধতিটি ব্যবহার করুন:

newsStory.WhenAdded.IsSameDay(DateTime.Now);

3
কেন শুধু ডেটটাইম 1 ফেরান না? তারিখ == ডেটটাইম 2. তারিখ?
সের্গিউ মিন্দ্রাস

@ সার্জিইউ মিন্দ্রাস ঠিক আছে, এটি উভয়ের তুলনায় যথেষ্ট Dateযেহেতু এটি TimeSpanসর্বদা 00:00:00 থাকবে।
GoRoS

5

অবগতির জন্য,

newsStory.Date == DateTime.Today

কোডিংয়ের মতো একই তুলনা ফলাফলটি প্রদান করবে

newsStory == DateTime.Today

newsStoryএকটি DateTimeবস্তু যেখানে

.NET আপনি কেবলমাত্র তারিখের ভিত্তিতে তুলনা করতে চান তা নির্ধারণ করতে যথেষ্ট স্মার্ট এবং এটি অভ্যন্তরীণ তুলনার জন্য ব্যবহার করে। নিশ্চিত কেন না এবং প্রকৃতপক্ষে এই আচরণের জন্য ডকুমেন্টেশন খুঁজতে সমস্যা হচ্ছে।




1

ঠিক আছে, ডেটটাইমের একটি "তারিখ" সম্পত্তি আছে এবং আপনি কেবল তার ভিত্তিতে তুলনা করতে পারেন। তবে দস্তাবেজগুলি দেখে মনে হচ্ছে যে সম্পত্তিটি অর্ধরাত্রিতে নির্ধারিত সময় উপাদানটির সাথে একটি নতুন ডেটটাইমকে বাস্তবে রূপান্তরিত করে, তাই এটি প্রতিটি স্বতন্ত্র উপাদান অ্যাক্সেসের চেয়ে খুব ধীর হতে পারে যদিও অনেকটা ক্লিনার এবং আরও পাঠযোগ্য।


আমি মনে করি একটি মন্দা (যদি বিদ্যমান থাকে) এত ছোট হবে তবে এটি প্রায় সব ক্ষেত্রেই কিছু যায় আসে না। অবশ্যই অকাল অপ্টিমাইজেশনের একটি মামলা।
এসবেন স্কোভ পেডারসেন

সম্মত - আজকের দিনে আমি অকালীন অপ্টিমাইজেশনকে কাঁপানো ক্রমশ কঠিন হয়ে পড়েছি কারণ আধুনিক কোডিং জগতটি পাঠযোগ্যতা এবং রক্ষণাবেক্ষণের বিষয়ে আরও বেশি। পুরানো অভ্যাস দূর করা কঠিন!
পিটার ব্রিজার


-4

কেমন

if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
{ // Story happened today
}

তবে এটি 1 লা জানুয়ারী 2008 এবং 1 লা জানুয়ারী 2009 এর ক্ষেত্রেও সত্য ফিরে আসবে, যা আপনি যা চান তা হতে পারে বা নাও পারে।


-6

আপনি ব্যবহার করতে পারেন DateTime.Now.DayOfYear

 if (newsStory.DayOfYear == DateTime.Now.DayOfYear)
 { // story happened today

 }
 else
 { // story didn't happen today

 }

1
আমি মনে করি না এটি কাজ করবে। আজ যদি 10/21/2009 হয়, এবং নিউজস্ট্রি 10/21/2008 হয় - এটি সত্য হবে (আমি এখানে লিপ বছর গ্রহণ করি নি)।
ফিলিপ ওয়ালেস

2
এটি বছরের জন্য নতুন ডেটটাইম (২০০৯, ১০, ২০১০) এর মধ্যে বৈষম্য দেখাবে না ayডাইফায়ার == নতুন ডেটটাইম (1900, 10, 01) D
ডেভ ডাউনস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.