PDA

View Full Version : سوال: مشکل در ذخیره کردن روز 31 هر ما



sepehr.sz
یک شنبه 31 شهریور 1392, 00:18 صبح
برای ذخیره کردن تاریخ ابتدا آن را به شمسی تبدیل می کنم و آن را در فیلدی در sql server ازنوع (datetime2(7
میریزم اما در روز 31 قابل ثبت نیست
ممنون میشم راهنمایی کنید

m_ali_gho
یک شنبه 31 شهریور 1392, 00:33 صبح
بهتره تاریخ شمسی بوسیله رسته ذخیره بشه.
انواع تاریخی sql server از نوع میلادی هستند که همونطور که میدونید الزاما شماره ماه های میلادی که 31 روز هستند با شماره ماه های شمسی 31 روزه یکی نیستند.

arash201
یک شنبه 31 شهریور 1392, 14:43 عصر
بهتره تاریخ شمسی بوسیله رسته ذخیره بشه.
انواع تاریخی sql server از نوع میلادی هستند که همونطور که میدونید الزاما شماره ماه های میلادی که 31 روز هستند با شماره ماه های شمسی 31 روزه یکی نیستند.

بله دوست عزیز بنده با m_ali_gho موافقم که شما می بایست در C# از یکی از کامپیوننت و یا کلاسی که تاریخ میلادی رو به شمسی تبدیل کنه استفاده و در صورت ذخیره کردن باید از نوع nvarchar(50) استفاده کنید تا تاریخ بصورت رشته ذخیره شود.

sepehr.sz
یک شنبه 31 شهریور 1392, 14:48 عصر
خوب اینطوری که کل پروژه به هم می ریزه

arash201
یک شنبه 31 شهریور 1392, 14:57 عصر
خوب اینطوری که کل پروژه به هم می ریزه
نه به هم نمی ریزه.شما زمانی که دیباگ رو clean کنین خود سی شارپ اتوماتیک یه دیباگ دیگه تولید می کنه.شما برای دیباگ سه گزینه دارید:1-clean 2-rebuild 3-build اینها گزینه های پیش روتونه که از هر کدوم خواستین می تونین استفاده کنین.و برای sql هم شما راه دیگه ندارین چون باید تاریخ رو بصورت رشته ذخیره کنید.

sepehr.sz
یک شنبه 31 شهریور 1392, 15:01 عصر
نه به هم نمی ریزه.شما زمانی که دیباگ رو clean کنین خود سی شارپ اتوماتیک یه دیباگ دیگه تولید می کنه.شما برای دیباگ سه گزینه دارید:1-clean 2-rebuild 3-build اینها گزینه های پیش روتونه که از هر کدوم خواستین می تونین استفاده کنین.و برای sql هم شما راه دیگه ندارین چون باید تاریخ رو بصورت رشته ذخیره کنید.

خوب کدهای سی شارپ که دیکه تغییر نمی کنه

ashkan1234
یک شنبه 31 شهریور 1392, 15:08 عصر
سلام!
پیشنهاد منم اینه که اگر مقدار تاریخیت از یه فرمت ثابت استفاده میکنه(یعنی مقدار ورودیش ثابته)از ncharاستفاده کن!
مثلا اگر تاریخ اینجوری ذخیره میشه:1392/06/31
میتونی فیلد رو اینجوری در نظر بگیری(nchar(10
البته نظر شما هم مهمه...:لبخند::کف:

aliramazani
پنج شنبه 01 مرداد 1394, 20:47 عصر
من یه محاسبه روی تاریخ انجام میدم مثلا اختلاف بین دو تاربخ ولی وقتی تاریخ 31 ام را مقایسه میکنم جواب نمیده و مقداری بر نمیگردونه. چکار کنیم مشکل این 31ام حل بشه

ali_md110
پنج شنبه 01 مرداد 1394, 21:44 عصر
مشکل تاریخ توی سایت زیاد بحث شده جستجو بزنید لطفا
یکی از بهترین راهها بکارگیری نوع میلادی تاریخ منطورم Dateتوی دیتابیس هست و بکارگیری مبدلها از سمت کدها برنامه یا کدهای درون بانک اطلاعاتی هست مثل توابغ تبدیل تاریخ بقیه انواع مشکلات خاص خودشو داره مثل محاسبات تاریخی یا عدم تشخیصبعضی روزها

Amir4317
پنج شنبه 01 مرداد 1394, 23:22 عصر
سلام
قبل از ذخیره تاریخ در database اون رو به میلادی تبدیل کنید
و در محاسباتتون هم به راحتی ازشون استفاده کنید
تنها زمانی که لازمه به کاربر نمایش داده بشه اونها رو دوباره تبدیل به شمسی کنید.

این روش یکی از احمقانه ترین کارهاست!
روش ساده و به قول بچه ها جواب پس داده! استفاده از داده نوع sting یا همون varchar 10 هستش
تاریخ همواره بصورت 1234/12/12 نوشته و ذخیر میشه پس نیازی نیس nvar باشه
برای مقایسه دو تاریخ و تبدیل به میلادی و ... هم چندین بار کلاس هایی بسیار عالی نوشته شدن که خرجش یک گوگل در اینترنت است.

موفق و پیروز باشید :لبخند:

aliramazani
جمعه 02 مرداد 1394, 00:19 صبح
تاریخی که من روی اون محاسبات انجام میدم توی دیتابیس ذخیره نیست و نخواهد شد. من دو تا تاریخ دادم که باید اختلافشون بدست بیاد و برای همه حالات و روزها وار میکنه مگر اینکه 31 ام انتخاب بشه

ژیار رحیمی
جمعه 02 مرداد 1394, 02:35 صبح
من با تمام حالت تاریخ کار کردم چه رشته ای جه بصورت عددی ولی اصولی ترین حالت که راحت ترینش برای برنامه نویس چه از جهت مقایسه تاریخ بی عیب و نقص هست استفاده از datetime پیش فرض sql هست که تاریخ و ساعت رو باهم ذخیره میکند.در برنامه ت هر جا لازم بود تاریخ شمسی نشون بدی تاریخ رو تبدیل کن.کار شما اشتباهه که تاریخ شمسی رو در فرمت datetime ذخیره کردی:متعجب:

ژیار رحیمی
جمعه 02 مرداد 1394, 02:40 صبح
خب اگه قرارنیست در دیتابیس ذخیره شود.شما دو تاریخ از کاریر میگیری یا خودت دو تاریخ داری در برنامه ت که بصورت شمسی هست .اول اونارو به تاریخ میلادی تبدیل کن در حالت میلادی مقایسه دو تاریخ از timespan اسفاده کن تمامو کمال تفاوت دو تاریخ رو چه از جهت روز و ماه و سال بهت میده

davidrobert
جمعه 02 مرداد 1394, 03:46 صبح
سلام خدمت دوستان من این مشکل رو داشتم حل کردم برای تاریخ شمسی با کلک رشتی. اول یک فیلد ساختم برای تاریخ شمسی ولی از نوع nvarchar و دوم یک فیلد ساختم برای تاریخ میلادی از نوع date
از اونجا که من نمی تونم روی شمسی عمل مقایسه انجام بدم قبل از ذخیره میاد تاریخ شمسی رو تبدیل میلادی شو میگیرم و به میلادی تاریخ شمسی رو تبدیل میکنم چون تاریخ شمسی رو میخوام تاریخ شمسی و میلادی رو با هم ذخیره میکنم و وقتی طرف تاریخ سمشی رو انتخاب میکنه برای مقایسه سیستم تاریخ میلادی شو میده و عمل مقایسه روی داده ها انجام میدم.
کد مبدل تاریخ شمسی به میلادی با گرفتن 31 روز ها
این کده درون فروم در حال اجرا
private void dgv1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
try
{
string shamsi = dgv1.CurrentRow.Cells["ClmDateAngezaShamsi"].Value.ToString();
string year = shamsi.Substring(0, 4);
string manth = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
dgv1.CurrentRow.Cells["ClmDateAngezaMeladi"].Value = ClsNeedCode.Miladi(year, manth, day);
}
catch
{
}
}

این کد داخل کلاس.
public static string Miladi(string year, string month, string day)
{
//تبدیل تاریخ شمسی به میلادی
try
{
PersianCalendar pc = new PersianCalendar();
DateTime dt1 = pc.ToDateTime(int.Parse(year), int.Parse(month), int.Parse(day), 0, 0, 0, 0);
return dt1.Year + "/" + dt1.Month + "/" + dt1.Day;
}
catch
{ return ""; }
}

aliramazani
جمعه 02 مرداد 1394, 12:20 عصر
خودمم همین تو ذهنم بود

davidrobert
جمعه 02 مرداد 1394, 12:41 عصر
خودمم همین تو ذهنم بود

پس این روش تو ذهنتون هستش که من گفتم رو انجام بدید من برای مرجوعی کالا سود زیان بر حسب تاریخ همین کار رو کردم تاریخ شمسی رو طرف انتخاب میکنه ولی سریع تاریخ میلادی محاسبه میشه و شرط برای کالا مرجوع شده یعنی تاریخ انقضا کالا و همین طور سود زیان رو شمسی انتخاب میکنم ولی تاریخ میلادی کالا بررسی میشه بر حسب تاریخ سیستم و اطلاعات رو نشان میده و میگه این کالا 2 روز دیگه فاسد میشه و میگه امروز ، این هفته ، این ماه یا سال چقدر فروش و سود زیان داره کالا.

aliramazani
جمعه 02 مرداد 1394, 23:50 عصر
همین روش جواب داد.. ظاهدا راه دیگه ای وجود نداره

davidrobert
شنبه 03 مرداد 1394, 13:48 عصر
همین روش جواب داد.. ظاهدا راه دیگه ای وجود نداره

نه وجو نداره ویژگی date , datetime, datetime2 همه شون تاریخ رو ذخیره میکنن ولی وقتی به تاریخ شمسی میرسه که مروبوط به ماه دوم و چارم هستش و روز 31 به غید شزط حالگیری میکنه و اجازه نمیده مسلما به همین خاطر باید از کلک رشتی استفاده کنید یه فیلد شمسی و یک فیلد میلادی شمسی از نوع nvarchar میلادی از نوع date چون وقتی از نوع date باشه تاریخ میشه روش عمل مقایسه رو انجام داد.