نمایش نتایج 1 تا 2 از 2

نام تاپیک: خطا در تبدیل رشته به datetime

  1. #1

    خطا در تبدیل رشته به datetime

    درود و خسته نباشید
    دارم برنامه ای مینویسم تحت عنوان مدیریت یک هتل (به عنوان نمونه) در ویندوز فرم سی شارپ و پروسیجر ها و تیبل های اس کیو ال


    تو فرم پذیرش مسافر جدید من برای قسمت شروع اقامت مسافر جدید ماسک تکست باکسی گذاشتم که فقط فرمت ####/##/## باید توش فیل بشه و در غیر این صورت به کاربر ارور میده که تاریخ رو اشتباه نوشته و درستش کنه پس یعنی ما اصلا تاریخ اشتباهی نداریم و همه تاریخ هامون کاملا صحیح توی دیتابیس ثبت میشن


    برای مثال پذیرشی انجام میدیم از با شروع اقامت 1398/03/02 و اتاقی رو انتخاب میکنیم که کرایش روزی 1000 تومنه
    در قسمت پذیرش شده های هتل، برای این کاربر اتمام پذیرش رو در 1398/03/09 میزنیم یعنی اون مسافر به مدت 7 روز توی هتل مونده و باید نرم افزار مبلغ 7000 تومن رو ازش بخواد....خب تا اینجای کار درسته و هیچ مشکلی نداریم یعنی تمام قسمت ها بدرستی انجام میشه


    من تست کردم و دیدم برای مثال اگر تاریخ های 1398/02/31 یا 1398/02/29 یا 1398/02/30 رو وارد کنم و اتمام پذیرش رو بزنم کد برنامم ارور میده و میگه نوع تاریخ اشتباهه
    -------------------------------------------------------------------------------------------
    کد قسمت حساب کردن کرایه به این شکل هست:



    PersianCalendar pc = new PersianCalendar();
    string strDate = pc.GetYear(DateTime.Now).ToString("0000") + "/" + pc.GetMonth(DateTime.Today).ToString("00") + "/" + pc.GetDayOfMonth(DateTime.Now).ToString("00");


    DateTime dt1;
    DateTime dt2;


    dt1 = Convert.ToDateTime(strDate);
    dt2 = Convert.ToDateTime(txtBDate.Text);


    int Distance = Convert.ToInt32((dt1 - dt2).TotalDays.ToString());

    که بعد از این قسمت با پروسیجر و دیتابیس کار میکنم که مشکلی نداره کدها و فقط این قسمت مشکل داره و مطمئنم از همین قسمته


    -----------------------------------------------------------------------------------------------------------------


    که به درستی برای همه تاریخ ها کار میکنه به جز روز های 29 و 30 و 31 و خب طبیعتا در تاریخی مثل 1398/02/00 هم که باید ارور بده و طبیعیه اما دلیل ارور های روز های 29و30و31 رو نمیدونم
    ممنون میشم کمکم کنید


    -------------------------------------------------------------------------------------------------------------------


    اروری که برای اون روز ها میده هم اینه:



    {"String was not recognized as a valid DateTime."}
    و این ارور رو روی این خط کد میده:

    dt2 = Convert.ToDateTime(txtBDate.Text);


    که تاریخ شروع اقامت مسافر هست


    لطفا اگه کسی مشکل رو میدونه جواب بده

  2. #2

    نقل قول: خطا در تبدیل رشته به datetime

    نوع datetime مخصوص تاریخ میلادی هست و نباید تاریخ شمسی درش ذخیره کنید. پس باید به طریقی به میلادی تبدیل کنید.
    از متد زیر استفاده کنید. در صورتی که تاریخ شمسی معتبر باشد به میلادی تبدیل میکند.
            private bool ValidatePersianDate(string strInput, out DateTime dtResult)
    {
    return DateTime.TryParse(
    strInput,
    CultureInfo.CreateSpecificCulture("fa-ir"),
    DateTimeStyles.AssumeLocal,
    out dtResult);
    }

    کدتون رو به شکل زیر تغیرر بدید
                DateTime dt1 = DateTime.Today;
    DateTime dt2;
    bool isValid = ValidatePersianDate(txtBDate.Text, out dt2);
    if (isValid)
    {
    int totalDays = (int) (dt1 - dt2).TotalDays;
    // ...
    }

تاپیک های مشابه

  1. آموزش: تفاوت DateTime.UtcNow و DateTime.Now
    نوشته شده توسط ایمان مدائنی در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: دوشنبه 06 خرداد 1392, 23:25 عصر
  2. تبدیل تاریخ رشته ای به Datetime?
    نوشته شده توسط mze666 در بخش T-SQL
    پاسخ: 1
    آخرین پست: سه شنبه 28 شهریور 1391, 07:09 صبح
  3. آموزش: datetime ( میلادی) در بانک و datetime (شمسی) در گرید ویو
    نوشته شده توسط mmd2009 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: یک شنبه 14 شهریور 1389, 16:08 عصر
  4. DateTime
    نوشته شده توسط myexir در بخش SQL Server
    پاسخ: 1
    آخرین پست: یک شنبه 05 آبان 1387, 18:46 عصر
  5. سوال: فرمتهای مختلف DateTime
    نوشته شده توسط aeirik در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 22 مرداد 1387, 16:53 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •