সি # তে কিভাবে একটি ডেটটাইম যাচাই করা যায়?


118

আমি সন্দেহ করি যে আমিই একমাত্র এই সমাধানটি নিয়ে এসেছি তবে আপনার যদি আরও ভাল থাকে তবে দয়া করে এটি এখানে পোস্ট করুন। আমি কেবল এই প্রশ্নটি এখানে রাখতে চাই যাতে আমি এবং অন্যান্যরা এটি পরে অনুসন্ধান করতে পারি।

একটি পাঠ্য বাক্সে কোনও বৈধ তারিখ প্রবেশ করা হয়েছে কিনা তা আমার জানা দরকার এবং আমি এই কোডটি দিয়ে এসেছি। ফোকাস পাঠ্য বাক্সটি ছেড়ে গেলে আমি এটিকে ফায়ার করি।

try
{
    DateTime.Parse(startDateTextBox.Text);
}
catch
{
    startDateTextBox.Text = DateTime.Today.ToShortDateString();
}

1
<জবাবদিহি> উত্তরগুলির দ্বারা বিচার করে, আমি মনে করি আমার ট্রাইপার্স ব্যবহার করা উচিত </ সার্কাসম> দারুণ উত্তরের জন্য ধন্যবাদ। আমি ট্রাইপার্স
ম্যাট

2
গুগল প্রশ্নের সহজ প্রশ্নের একটি উদাহরণ যে আজ যদি কেউ জিজ্ঞাসা করে তবে "পর্যাপ্ত গবেষণা না করার জন্য" অন্যায়ভাবে বন্ধ হয়ে যাবে।
লাইভ-লাভ

1
এখানে কোনও বিশেষ ফাংশন ব্যবহার না করে এটি করার একটি সহজ উপায়: < stackoverflow.com/questions/14917203/… >
জমির


2
ডেটটাইমসের সাথে কাজ করা সবসময় খাদের ব্যথা হয়। ধন্যবাদ
Gonzo345

উত্তর:


269
DateTime.TryParse

এটি আমি বিশ্বাস করি এটি দ্রুত এবং এটির অর্থ আপনাকে কুৎসিত চেষ্টা / ক্যাচ ব্যবহার করতে হবে না :)

যেমন

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
  // Yay :)
}
else
{
  // Aww.. :(
}

2
আমি ভুল হলে আমাকে সংশোধন করুন, তবে সি # তে (যেমন, জাভাস্ক্রিপ্টের বিপরীতে বলা হয়েছে) যদি / অন্য শাখায় কোঁকড়ানো ধনুর্বন্ধনী প্রয়োজন হয় না? আমাকে ভুল না করে, আমি যাচাই করার চেষ্টা করছি না, এটি একটি দুর্দান্ত উত্তর এবং আমি এটি +1 করছি কারণ এটি আমাকে সহায়তা করেছে, তবে কেবল ভেবেছিলাম যেহেতু আপনি কখনই জানেন না যে ইতিমধ্যে পোস্ট করা উত্তরগুলি দেখার সময় নতুন ভবিষ্যতের ব্যবহারকারীরা কীভাবে আছেন, এটি তাদের বিভ্রান্ত করতে পারে অবশ্যই, আপনি যদি সি # তে কোঁকড়ানো ধনুর্বন্ধনী নিয়ে সমস্যা বোধ করেন তবে এই প্রশ্নটি আপনার উদ্বেগের মধ্যে সবচেয়ে কম ...
ভয়েডকিং

2
@ ভয়েডকিং আপনি কোঁকড়ানো ধনুর্বন্ধনী সম্পর্কে সঠিক তবে আপনার যদি এই ব্লকে কেবলমাত্র 1 টি বিবৃতি থাকে তবে আপনাকে সেগুলি ব্যবহার করতে হবে না। এটি অন্যান্য কয়েকটি ভাষায়ও প্রযোজ্য তবে আমি দেখতে পাচ্ছি কীভাবে এটি নতুন কোডারদের জন্য বিভ্রান্তিকর হতে পারে।
ডি গালভেজ

2
@ ডি.গালভেজ আমার দেরিতে পার্টিতে আসার জন্য ক্ষমা করবেন, তবে শুধুমাত্র 1 টি স্টেটমেন্ট থাকলেও বন্ধনী অন্তর্ভুক্ত করা কি সেরা অনুশীলন? এই মাত্র একটি অবস্থা যেখানে ব্যক্তিগত পছন্দের সবচেয়ে গুরুত্বপূর্ণ হতে পারে - এবং যে ক্ষেত্রে আমি খুঁজে সহ তাদের কেবল পাঠযোগ্যতা এবং দৃঢ়তা জন্য বেশ ভালো।
নিক

2
আমি 6 বছর আগে খুব কমই জানতাম যে বন্ধনী সম্পর্কে এই জাতীয় বিতর্ক ঘটবে।
qui

এর মাধ্যমে পরিবর্তনশীল if(DateTime.TryParse(startDateTextBox.Text, out var temp))
সূচনাটি

61

প্রবাহ নিয়ন্ত্রণের জন্য ব্যতিক্রম ব্যবহার করবেন না। ডেটটাইম.ট্রি পার্স এবং ডেটটাইম.ট্রাই পার্সি এক্স্যাক্ট ব্যবহার করুন । ব্যক্তিগতভাবে আমি একটি নির্দিষ্ট ফর্ম্যাট দিয়ে ট্রাইপার্সেক্সটকে প্রাধান্য দিই তবে আমার ধারণা অনুমান করা যায় যে ট্রাইপার্স আরও ভাল হওয়ার সময় রয়েছে। আপনার মূল কোডের ভিত্তিতে ব্যবহারের উদাহরণ:

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
    startDateTextox.Text = DateTime.Today.ToShortDateString();
}

এই পদ্ধতিকে প্রাধান্য দেওয়ার কারণগুলি:

  • ক্লিয়ারার কোড (এটি কী করতে চায় তা বলে)
  • ব্যতিক্রমগুলি ধরা এবং গিলানোর চেয়ে ভাল পারফরম্যান্স
  • এটি অনুপযুক্তভাবে যথাযথভাবে ধরা দেয় না - যেমন আউটআউফ-মেমরিএক্সসেপশন, থ্রেডইন্টারটেড এক্সসেপশন। (আপনার প্রাসঙ্গিক কোডটি কেবলমাত্র প্রাসঙ্গিক ব্যতিক্রম ধরা পড়ে এটি এড়াতে ঠিক করা যেতে পারে তবে ট্রাইপার্স ব্যবহার করা আরও ভাল হবে))

24

সমাধানের আর একটি প্রকরণ যা সত্যটি ফেরত দেয় যদি স্ট্রিংটি কোনও DateTimeধরণের রূপান্তর করা যায় এবং অন্যথায় মিথ্যা হয়।

public static bool IsDateTime(string txtDate)
{
    DateTime tempDate;
    return DateTime.TryParse(txtDate, out tempDate);
}

3
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! ইতিমধ্যে সরবরাহ করা উত্তরগুলি দেখুন, বিশেষত যখন তিন বছরেরও বেশি পুরানো এবং সাফল্যের সাথে উত্তর দেওয়া হয়েছে এমন কোনও প্রশ্নের জবাব দেওয়ার সময়। আপনার উত্তরটি ইতিমধ্যে পূর্ববর্তী উত্তরদাতাদের দ্বারা কভার করা হয়েছে।
বব কাউফম্যান



3

ব্যবহার করে একটি সমস্যা DateTime.TryParseহ'ল এটি বিভাজক ছাড়াই প্রবেশের তারিখগুলির খুব সাধারণ ডেটা-এন্ট্রি ব্যবহারের ক্ষেত্রে সমর্থন করে না, যেমন 011508

কীভাবে এটি সমর্থন করবেন তার একটি উদাহরণ এখানে। (এটি আমি যে ফ্রেমওয়ার্কটি তৈরি করছি তা থেকেই এটির স্বাক্ষরটি খানিকটা অদ্ভুত, তবে মূল যুক্তিটি ব্যবহারযোগ্য হবে):

    private static readonly Regex ShortDate = new Regex(@"^\d{6}$");
    private static readonly Regex LongDate = new Regex(@"^\d{8}$");

    public object Parse(object value, out string message)
    {
        msg = null;
        string s = value.ToString().Trim();
        if (s.Trim() == "")
        {
            return null;
        }
        else
        {
            if (ShortDate.Match(s).Success)
            {
                s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 2);
            }
            if (LongDate.Match(s).Success)
            {
                s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 4);
            }
            DateTime d = DateTime.MinValue;
            if (DateTime.TryParse(s, out d))
            {
                return d;
            }
            else
            {
                message = String.Format("\"{0}\" is not a valid date.", s);
                return null;
            }
        }

    }

আমি আমার ক্ষেত্রে seporators সম্পর্কে উদ্বিগ্ন নই কারণ আমি একটি মুখোশযুক্ত পাঠ্য বাক্স ব্যবহার করছি তবে আমি দেখতে পাচ্ছি যে অন্যান্য পরিস্থিতিতে আমি কীভাবে এই অ্যাপটির সাথে মুখোমুখি হতে পারি that
ম্যাট

বিভাজক ছাড়াই ডেটটাইম স্ট্রিং ব্যবহার করার কারণ কী?
সের্গেই কোভালেনকো

1
    protected bool ValidateBirthday(String date)
    {
        DateTime Temp;

        if (DateTime.TryParse(date, out Temp) == true &&
      Temp.Hour == 0 &&
      Temp.Minute == 0 &&
      Temp.Second == 0 &&
      Temp.Millisecond == 0 &&
      Temp > DateTime.MinValue)
            return true;
        else
            return false;
    }

// ধরুন যে ইনপুট স্ট্রিংটি স্বল্প তারিখের ফর্ম্যাট।
যেমন "2013/7/5" সত্য ফিরে আসে বা
"2013/2/31" মিথ্যা প্রত্যাবর্তন করে।
http://forums.asp.net/t/1250332.aspx/1
// বুল বুলিয়ানভ্যালু = বৈধতা জন্মদিন ("12:55"); মিথ্যা প্রত্যাবর্তন


1
private void btnEnter_Click(object sender, EventArgs e)
{
    maskedTextBox1.Mask = "00/00/0000";
    maskedTextBox1.ValidatingType = typeof(System.DateTime);
    //if (!IsValidDOB(maskedTextBox1.Text)) 
    if (!ValidateBirthday(maskedTextBox1.Text))
        MessageBox.Show(" Not Valid");
    else
        MessageBox.Show("Valid");
}
// check date format dd/mm/yyyy. but not if year < 1 or > 2013.
public static bool IsValidDOB(string dob)
{ 
    DateTime temp;
    if (DateTime.TryParse(dob, out temp))
        return (true);
    else 
        return (false);
}
// checks date format dd/mm/yyyy and year > 1900!.
protected bool ValidateBirthday(String date)
{
    DateTime Temp;
    if (DateTime.TryParse(date, out Temp) == true &&
        Temp.Year > 1900 &&
       // Temp.Hour == 0 && Temp.Minute == 0 &&
        //Temp.Second == 0 && Temp.Millisecond == 0 &&
        Temp > DateTime.MinValue)
        return (true);
    else
        return (false);
}

1

সমস্ত উত্তরগুলি বেশ দুর্দান্ত তবে আপনি যদি একটি একক ফাংশন ব্যবহার করতে চান তবে এটি কার্যকর হতে পারে।

private bool validateTime(string dateInString)
{
    DateTime temp;
    if (DateTime.TryParse(dateInString, out temp))
    {
       return true;
    }
    return false;
}

1
কিভাবে "যদি" ব্লকের পরিবর্তে ডেটটাইম.TryParse () এর ফলাফল ফিরে আসবে? এছাড়াও, আপনার আইডিই কখনও ব্যবহৃত টেম্পের জন্য অভিযোগ করবে না, যা আপনি ফাংশন কলের ভিতরে সরাসরি "আউট ডেটটাইম টেম্প" হিসাবে ঘোষণা করতে পারেন।
সের্গেই কোভালেনকো

0

আপনি DateTimeএকটি নির্দিষ্ট জন্য বিন্যাস সংজ্ঞায়িত করতে পারেনCultureInfo

public static bool IsDateTime(string tempDate)
{
    DateTime fromDateValue;
    var formats = new[] { "MM/dd/yyyy", "dd/MM/yyyy h:mm:ss", "MM/dd/yyyy hh:mm tt", "yyyy'-'MM'-'dd'T'HH':'mm':'ss" };
    return DateTime.TryParseExact(tempDate, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out fromDateValue);
}

-1
protected static bool CheckDate(DateTime date)
{
    if(new DateTime() == date)      
        return false;       
    else        
        return true;        
} 

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

প্রশ্নটি জিজ্ঞাসা করছে যে কীভাবে stringকোনও DateTImeমান থাকতে পারে বা এটিতে কোনও মান থাকতে পারে না । প্রদত্তের DateTimeডিফল্ট মান রয়েছে কিনা তা আপনি পরীক্ষা করছেন 0001-01-01T00:00:00.0000000। কিভাবে এই প্রশ্নের উত্তর দেয়?
ডিবিসি

-3
DateTime temp;
try
{
    temp = Convert.ToDateTime(grd.Rows[e.RowIndex].Cells["dateg"].Value);
    grd.Rows[e.RowIndex].Cells["dateg"].Value = temp.ToString("yyyy/MM/dd");
}
catch 
{   
    MessageBox.Show("Sorry The date not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop,MessageBoxDefaultButton.Button1,MessageBoxOptions .RightAlign);
    grd.Rows[e.RowIndex].Cells["dateg"].Value = null;
}

1
আপনাকে চেষ্টা করে ক্যাচ দিয়ে বৈধ পরীক্ষা করতে হবে। সুতরাং ইউ সমস্ত ধরণের ভেরিয়েবলগুলি পরীক্ষা করার জন্য ক্যাচ ব্যবহার করে বৈধ গ্লোবাল ফাংশন করতে এবং আপনার প্রকল্পে সমস্ত নিয়ন্ত্রণ করতে পারে। শুভেচ্ছা ..... আশরাফ
খলিফাহ

-3
DateTime temp;
try
{
    temp = Convert.ToDateTime(date);
    date = temp.ToString("yyyy/MM/dd");
}
catch 
{
    MessageBox.Show("Sorry The date not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop,MessageBoxDefaultButton.Button1,MessageBoxOptions .RightAlign);
    date = null;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.