PDA

View Full Version : string was not recognized as a valid datetime مشکل



lovee20002002
یک شنبه 17 فروردین 1393, 11:23 صبح
سلام من تو برنامم از Sql lite استفاده کردم تاریخ رو هم شمسی میگیرم و تو date ذخیره میکنم هیچ مشکلی تا حالا نداشتم الان فقط رو تاریخ 25/02/1393 تا 30 همین تاریخ این اررور رو میده ممکن هست کمک کنید حلش کنم فقز تو این تاریخ ها اررور میده قبل و بعد مشکل نداره این صفحه هم نتونست مشکل منو حل کنه

http://stackoverflow.com/questions/2193012/string-was-not-recognized-as-a-valid-datetime-format-dd-mm-yyyy

hamid_hr
یک شنبه 17 فروردین 1393, 11:42 صبح
فیلد Date تو دیتابیس از چه نوعی هستش؟

lovee20002002
یک شنبه 17 فروردین 1393, 14:55 عصر
خود date هست دوست غزیز

lovee20002002
یک شنبه 17 فروردین 1393, 15:01 عصر
طبق این مشکلی نباید داشته باشه تا حالا هم نداشتم مشکلی ولی این 3 تاریه رو نمیدونم چرا این error رو میده

http://technet.microsoft.com/en-us/library/ms186724.aspx

hamid_hr
دوشنبه 18 فروردین 1393, 18:08 عصر
میشه ارور و کداتو بزاری؟

lovee20002002
سه شنبه 19 فروردین 1393, 08:18 صبح
بله دوست عزیز ببخشید دیرشد بیام کد رو من با linq نوشته شده تو دیتا بیس 2 تا تاریخ دارم یکی تاریخ ثبت یکی تاریخ چک هردوتا date هستند تا الان که یک سال و خورده ای هست مشکل نداشتم من کد رو با کمی دیروز تغییر دادم الان این error رو میده اول مد تغییر یافته رو میزارم
try {


DateTime date1 = DateTime.ParseExact(datenow.Value.ToString("yyyy-MM-dd"), "yyyy-MM-dd", CultureInfo.InvariantCulture);
DateTime date2 = DateTime.ParseExact(chekdate.Value.ToString("yyyy-MM-dd"), "yyyy-MM-dd", CultureInfo.InvariantCulture);


db.savechek(date1,
txt_sh_ch.Text.ToString()
, Convert.ToDouble(txt_price.Text.ToString())
, date2
, txt_bank_name.Text.ToString()
, Convert.ToDouble(txt_price.Text.ToString())
, Guid.Parse(txtid.Text)
, Guid.Parse(txtid.Text)
, txttozihat.Text.ToString());




db.Factor_kharidars.DefaultIfEmpty();




txt_sh_ch.Select();


ClearTextBoxes();
Chek_daryafti_kh_Load(null, null);
MessageBox.Show("اطلاعات شما با موفقیت ذخیره شد");
loaddata();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
return;
}

اینم ارروری که الان میده

the date time represented by the string is not supported in calendar system.globalization.gregoriancalendar
قبلش از کانورت ایتفاده میکردم به جای parse این شکلی بود اررور بالا رو میداد به جای date1
Convert.ToDateTime(datenow.Value.ToString("yyyy-MM-dd"))
error اول که تو تیتر هست رو میداد الان موندم واقعا مشکل از چیه

hamid_hr
سه شنبه 19 فروردین 1393, 08:41 صبح
نمیدونم ولی یه راه ساده که بنظر من میرسه اینه که تاریخو از نوع Varchar(10) بگیری

lovee20002002
سه شنبه 19 فروردین 1393, 08:44 صبح
ممنون دوست عزیز ولی این پاک کردن صورت هست جالبه فقط با این 3 تا تاریخ مشکل داره یعنی 29-2 , 30-2 , 31-2 ممنون میشم بقیه دوستان هم یک نگاهی بندازن شاید فکری داشته باشن

hamid_hr
سه شنبه 19 فروردین 1393, 09:57 صبح
یه چیزی تاریخ میلادی ماه 2 فقط 28 روز داره
فک کنم برا همین باشه میگه تاریخ معتبر نیست

lovee20002002
سه شنبه 19 فروردین 1393, 10:16 صبح
ممنون دوست عزیز کاملا درست هست ولی چاره چی میتونه باشه ترفندی چیزی اگه باشه خیلی عالی میشه برای استفاده از تاریخ شمسی هم برای همیشه حل میشه تو دیتابیس هم نمیتونم وارد کنم دسیتی همین error رو میده یعنی باید کل برنامه رو تاریهشو از اول کارکنم لطفا اگر یک راه ساده و بی دردسر برای این کار هست بگید ممنون

hamid_hr
سه شنبه 19 فروردین 1393, 10:34 صبح
راه ساده اینه که نوع فیلدو تغییر بدی بزاریش Varchar
البته این به ذهن من رسید شاید اساتید بهتر بتونن راهنمایی کنن

lovee20002002
سه شنبه 19 فروردین 1393, 10:51 صبح
مشکل اینه اگر تغییر بدم تمام محاسبات تاریخی کار نمیکنه دیگه اگه با دستورات Sql هم محاسبات رو درست کنم بازم برنامه خیلی کند میشه اگه به میلادی تبدیل کنم 10000 داده وارد شده رو چکار کنم :گریه:

hamid_hr
سه شنبه 19 فروردین 1393, 11:06 صبح
خب محاسباتو اینطوری هم اشتباه میده که
مثلا شما بزنی 02/28 بعد یک روز بهش اضافه کنی میشه 03/01
در صورتی که باید بشه 02/29
خب تبدیل کن به میلادی و یه تیکه برنامه بنویس که کلیه تاریخ ها رو بگیره تبدیل به میلادی کنه و اون فیلد رو اپدیتش کن

lovee20002002
سه شنبه 19 فروردین 1393, 11:29 صبح
یه نمونه دارید برای این من داده های قبلی رو با sql تبدیل میکنم اگه یه نمونه باشه که کارشو ببینم سریعتر نتیجه میگیرم ممنون

hamid_hr
سه شنبه 19 فروردین 1393, 11:38 صبح
نمونه چی میخواین؟

lovee20002002
سه شنبه 19 فروردین 1393, 12:04 عصر
من کمی گشتم چند مدل تبدیل تاریخ رو دیدم حالا یک نمونه که مثلا تاریخ رو شمسی کاربر داد بعد به میلادی سیو بشه بعد اسن تاریخ خونده بشه و تو گریدویو به شمسی نشون بده ممنون میشم اگه نمونهای دارید قرار بدید

hamid_hr
سه شنبه 19 فروردین 1393, 12:36 عصر
برا sqlserver میشه
http://www.codeproject.com/Articles/28129/Creating-a-CLR-Persian-Date-Convertor-Function-for
برا sqlite نمیدونم

Mahmoud.Afrad
پنج شنبه 21 فروردین 1393, 20:04 عصر
وقتی تاریخ شمسی رو در ستون از نوع تاریخ میلادی ذخیره میکنی اگر قرار باشه محاسبات مالی صورت بگیره احتمال خطای مالی هست چون شما مبنا رو شمسی در نظر میگیری ولی در اصل به صورت میلادی انجام میشه!!

راه حل:
قبل از هر چیز یک کپی از فایل دیتابیس به عنوان بکاپ تهیه کن.


دو راه داری؛ یکی اینکه تاریخ رو میلادی ذخیره کنی. دوم اینکه شمسی ذخیره کنی.
در هر صورت نیاز به تغییر کد داری.
پیشنهاد میکنم شمسی ذخیره کنی. برای این کار یک ستون جدید ایجاد کن از نوع VarChar(10) . حالا با یک کوئری آپدیت برای همه رکوردها مقدار تاریخ رو به رشته تبدیل و در این فیلد جدید ذخیره کن. حالا از صحت اطلاعات مطمئن شو. بعد ستون Date رو حذف کن. حالا در برنامه در کوئری ها از ستون جدید استفاده کن.

bambouk
دوشنبه 29 اردیبهشت 1393, 08:03 صبح
سلام دوست عزیز
فکر میکنم الان که به سوال شما جواب میدم خیلی دیر شده باشه ولی اینو برای دوستایی میگم که همین مشکل رو دارن
من برای حل این مشکل تاریخ رو توی بانک اطلاعاتی بصورت bigint در نظر گرفتم و بعد توی یه کلاس توی برنامه تمام تاریخ ها رو بصورت Text گرفتم و تبدیل به Long کردم
برای برگردوندن اونها به برنامه هم همین کار رو برعکس کردم یعنی Long گرفتم و تبدیل کردم به Text
با این کار هم مشکل اون سه روز در شمسی وجود داره و در میلادی نیست حل میشه هم اشتباهتی که در نوع ذخیره شمسی و میلادی تاریخ هست حل میشه
و هم امکان جستجو و مقایسه و انتخاب یک بازه زمانی خاص مثلا یک ماه یا دوماه یا هر چیز دیگه ای رو میده
امیدوارم مشکلت حل شده باشه
اینرو هم بدون
مهندس برای حل مساله اگه راهی باشه اونرو پیدا میکنه و اگه راهی نباشه خودش یه راه میسازه
موفق باشی