PDA

View Full Version : تبدیل رشته به تاریخ



bita_naz
یک شنبه 02 فروردین 1388, 19:41 عصر
سلام دوستان

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

مشکل من >> تصمیم گرفتم که برای ذخیره تاریخ در دیتابیس (SQL Sever ) فقط از تاریخ میلادی استفاده کنم و دیتاتاپیپ رو هم DateTime گذاشتم . و برای نشون دادنش در فرم از رشته استفاده می کنم. حالا هر بار باید این رشته رو که بشکل تاریخ شمسی هم هست رو ابتدا به تاریخ و بعد به تاریخ میلادی تبدیل کنم و بعد در دیتابیس ذخیره کنم.

حالا چکار کنم؟؟؟ تمام کامپوننتهای کار با تاریخ فارسی مثل Persia و FarsiLibrary هیچکدوم یک رشته رو به تاریخ میلادی یا شمسی تبدیل نمیکنن.


مرسی

rnm123
یک شنبه 02 فروردین 1388, 20:44 عصر
با سلام
دوست عزیز رشته را که خیلی راحت میتونی به تاریخ تبدیل کنی. اگر رشته شما یکپارچه است یعنی به صورت مثلا 2002/2/2 میباشد اول باید به کمک توابع substring سه تا زیر رشته سال و ماه و روز را به دست آوری در مثال فوق شما باید سه رشته 2002و 2و2 را بدست آوری . بعد یک متغیر از نوع dateTime ایجاد میکنی و با دستور new آنرا با سه رشته فوق مقدار دهی میکنی . یعنی :


dateTime dt = new DateTime(int.parse(str1), int.parse(str2), int.parse(str3));

البته دستور فوق را در داخل یک بلاگ try قرار بده تا اگر در تبدیل رشته ورودی به عدد و یا ایجاد تاریخ از اعداد ورودی مشکلی ایجاد شد برنلمه توقف نکند علت این خطا هم میتواند به علت ورود کاراکترهای غیر مجاز به رشته و یا اعداد در محدوده غیرمجاز( مثلا13برای ماه) باشد. حالا شما متغیر dt را دارید که حاوی تاریخ میلادی است . ایجاد تاریخ شمسی هم دقیقا به همین روش است. رشته های str1 و str2و str3 هم زیر رشته های ایجاد شده از رشته اصلی میباشند

Sajjad.Aghapour
یک شنبه 02 فروردین 1388, 21:22 عصر
ببین اینطوری می تونی کار کنی.....


PersianCalendar c = new PersianCalendar();
GregorianCalendar g = new GregorianCalendar(GregorianCalendarTypes.USEnglish );

int _y = g.GetYear(c.ToDateTime(1388, 1, 2, 1, 1, 1, 1));

seven7777777
دوشنبه 03 فروردین 1388, 01:15 صبح
دوست عزیز سلام
شما می تونید کاری به مراتب راحت تر و بهتر انجام بدهی !
شما برای کاربری که می خواهد تاریخ را تغییر دهد از سه combobox با مقادیر سال ، ماه و روز استفاده کن . اینجوری هم هر عدد رو جدا جدا داری ، هم تبدیلش به تاریخ خیلی راحته و هم امکان وارد کردن کاراکتر غیرمجاز از طرف کاربر نیست .

newgoldenman
دوشنبه 03 فروردین 1388, 01:29 صبح
به به مهدی جان سلام!
ببین دوست من، شما دقیق نگفتی میخوای چچیكار كنی!
FarsiLibrary ، یكی از بهترین كامپوننت هایی هست كه میتونی استفاده كنی. همه مدل تابعی هم درون خودش داره برای راه انداختن كار شما(بلكه بیشتر) دقیقاً از كلاس DateTime ارث برده، پس میتونی همه مدل تاریخ و ساعت و دقیقه و هر چی كه از زمن بخوای، بهش دست یابی داشته باشی.
اگر بدونم دقیقاً خواسته ات چیه، یه كلاس اریخ و ساعت مشتی فول فارسی بهت میدم كه بری باهاش فضا!! :بامزه:

Sajjad.Aghapour
دوشنبه 03 فروردین 1388, 02:24 صبح
من با FarsiLib کار نکردم.ولی این کامپوننت امکان تبدیل تاریخ شمسی به میلادی رو هم داره یا نه فقط میلادی به شمسی تبدیل می کنه؟
چون خواسته دوستمون تبدیل شمسی به میلادی بود....


دوست عزیز رشته را که خیلی راحت میتونی به تاریخ تبدیل کنی. اگر رشته شما یکپارچه است یعنی به صورت مثلا 2002/2/2 میباشد اول باید به کمک توابع substring سه تا زیر رشته سال و ماه و روز را به دست آوری در مثال فوق شما باید سه رشته 2002و 2و2 را بدست آوری


نیازی به این کار نیست.


DateTime dt=Convert.ToDateTime("2002/2/2");

mahdi_farhani
دوشنبه 03 فروردین 1388, 10:17 صبح
دوست عزیز ، میتونی از کلاس که نوشتم استفاده کنی .
لینک تو امضاء هست
توابعی برای تبدیل به انواع مختلف تاریخ وجود داره
میلادی به شمسی
شمسی به قمری
شمسی به عبری
عبری به شمسی
ژاپنی به شمسی و..................................

hasan_esfahan
دوشنبه 03 فروردین 1388, 12:06 عصر
پیشنهاد:

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

seven7777777
دوشنبه 03 فروردین 1388, 12:13 عصر
البته من ذخیره به صورت رشته رو توصیه نمی کنم .
معایب زیادی داره . مثلا فرض کن خواستی در بین تاریخ های ثبت شده سرچ کنی و تاریخت رو بصورت رشته گرفته باشی ، از کجا معلوم که به جای 1387 مثلا 87 نزده باشه یا برعکس .
همین طور وقتی می تونی با 8 بایت فضای دیتابیس برای هم تاریخ و هم زمان کلی در فضا صرفه جویی کنی ، چرا 10 بایت بگیری ؟؟؟
کلا لقمه رو دور سرت نچرخون . البته ذخیره به صورت رشته بد نیست اما همه جا جواب نمی ده !!!

bita_naz
دوشنبه 03 فروردین 1388, 15:28 عصر
بسیار ممنونم از راهنمایی های ارزشمند همه دوستان:قلب:

دو سوال :
1- در تبدیل رشته تاریخ فارسی به میلادی اگر فقط بخام تاریخ میلادی رو داشته باشم (نه به همراه زمان) چکار کنم؟؟
2- برای تبدیل دستی تاریخ های میلادی در دیتاست به تاریخ فارسی برای نشون دادن به کاربر چکار کنم. ؟؟ (از TYPED دیتاست استفاده می کنم)


یه مقاله در ارتباط با سوال دومم در codeproject دیدم ولی دو تا مشکل داشت. یکی اینکه تاریخ ها رو بصورت 0/0/000 نشون میده مثلا بصورت 1388/1/3 نشون می ده.در ضمن یک دیتاست دیگه از روی دیتاست اصلی کپی می شه و این واسه من که با حجم زیاد رکورد ها کار دارم خوب نیست.
http://www.codeproject.com/KB/dotnet/Shamsi.aspx

newgoldenman
دوشنبه 03 فروردین 1388, 17:28 عصر
- در تبدیل رشته تاریخ فارسی به میلادی اگر فقط بخام تاریخ میلادی رو داشته باشم (نه به همراه زمان) چکار کنم؟؟

DateTime.ToShortDateString()


2- برای تبدیل دستی تاریخ های میلادی در دیتاست به تاریخ فارسی برای نشون دادن به کاربر چکار کنم. ؟؟ (از TYPED دیتاست استفاده می کنم)
نشون دادن به كاربر؟ به چه طریقی؟ اگر از DataTable استفاده میكنید و اونو به DataGridView یا مشابه اون وصل میكنید، از طریق متد CellFormatting هر تغییری كه دوست دارید بدید توی داده ی خامتون!
اگر هم از DataReader استفاده میكنید كه خیلی ساده هست و حتماً بلد هستید.

در ضمن، مقاله ای كه معرفی كردید، خیلی عالی هست و مناسب كار شما! مشكل كپی هم فقط با یك خط كد Dispose كردن آبجكت قدیمی DataSet تون میتونید رفعش كنید.

موفق باشید.

rnm123
دوشنبه 03 فروردین 1388, 17:45 عصر
دوست عزیز برای اینکار میتونی از متد date متغیر حاوی تاریخ استفاده کنی بصورت زیر :


datetime1.date

برای سئوال دومت هم باید بگویم اولا باید تنظیمات خاص مربوط به نمایش متن را در کنترل خود انجام دهی در مورد سئوال دوم هم نمی دانم چطوری دیتا ست خود را پر میکنی ولی اگر بتوانی در هنگام پر کردن دیتا ست خود و خواندن تاریخ از پایگاه داده آنرا به تاریخ شمسی تبدیل کرده و آنرا در دیتا ست خود ذخیره کنی فکر میکنم راه حل بهتری باشد

zoofa
سه شنبه 04 فروردین 1388, 02:12 صبح
با سلام
این هم یک ماژول هست شاید به درد دوستان بخورد
این ماژول تمامی کارهای مربوط به تاریخ را انجام می دهد
من این ماژول را ننوشتم
اما در یک برنامه استفاده کردم که خوب بود
سالهای کبیسه را هم به خوبی پشتیبانی می کند

این ماژول را در ضمیمه گذاشتم

اگر هم datepicker می خواهی یکی آقای شکرگزار درست کردند که جالب بود امکانات خوبی داشت
http://barnamenevis.org/forum/showthread.php?t=96484&page=1



یا علی

bita_naz
سه شنبه 04 فروردین 1388, 14:51 عصر
از توضیحات خوب همه دوستان کمال تشکر را دارم.

به این نتیجه رسیدم که تاریخ میلادی موجود در دیتاست رو تغییر ندم چون موقع آپدیت پیغام اور فلو میده. واسه همین تغییرات رو در سطح فرم انجام میدم.
واسه DateTimePicker هم از FarsiLibrary استفاده میکنم. اگر چیزه بهتری دارید لطفا معرفی کنید .
مرسی:لبخندساده:

ostovarit
سه شنبه 14 اردیبهشت 1389, 18:14 عصر
از توضیحات خوب همه دوستان کمال تشکر را دارم.

به این نتیجه رسیدم که تاریخ میلادی موجود در دیتاست رو تغییر ندم چون موقع آپدیت پیغام اور فلو میده. واسه همین تغییرات رو در سطح فرم انجام میدم.
واسه DateTimePicker هم از FarsiLibrary استفاده میکنم. اگر چیزه بهتری دارید لطفا معرفی کنید .
مرسی:لبخندساده:

سلام من هم از FarsiLiberary استفاده میکنم که مطابق میلم نیست راهی برای استفاده از Datetimepiker فارسی در گرید ویو وجود دارد؟