PDA

View Full Version : تاریخ شمسی



art2000ir
سه شنبه 01 خرداد 1386, 14:42 عصر
سلام
ابتدا عرض کنم که تقریبا تمام تاپیک های تاریخ شمسی را خوانده ام
سوال من اینه که :
من تاریخ را توسط یک تک باکس (ماسک شده برای تاریخ) می گیرم و در دیتابیس ذخیره می کنم اما میلادی ذخیره می کنه البته ار sysyem.globalizition.persian هم استفاذه کرم اما فرقی نکرد
1- آیا باید کلندر هم فارسی باشه ؟
2- من تاریخ ویندوز رانمی خواهم تاریخی که کاربر وارد می کنه برای من مهمه چه جوری این تاریح را فارسی بگیرم و ذخیره کنم ؟:افسرده:

__H2__
سه شنبه 01 خرداد 1386, 15:23 عصر
سلام
تاریخ را فارسی بگیرید با همان کلاسس به میلادی تبدیل کنید و ذخیره کنید و بعد مجدداً در زمان نمایش آنرا فارسی کنید. توجه کنید که ذخیره به صورت میلادی بهترین کار است.
گرچه طیقه اینکار بارها تکرار شده، ولی باز به کد زیر دقت کنید.


Dim d As Date
Dim year, month, day As Integer
Dim calendar As New System.Globalization.PersianCalendar

d = calendar.ToDateTime(year, month, day, 12, 0, 0, 0)

year = calendar.GetYear(d)
month = calendar.GetMonth(d)
day = calendar.GetDayOfMonth(d)

art2000ir
سه شنبه 01 خرداد 1386, 17:02 عصر
با تشکر از شما
درستور calender.getyear(d) تاریخ رو به میلادی تبدیل می کنه ؟
آیا این با تاریح ویندوز تنظیم هست ؟
من تاریخ رو از کار بر در یک تکس باکس به شکل 01/03/1386 می گیرم ظاهرا این کد تاریخ رو از ویندوز می گیره ؟

__H2__
سه شنبه 01 خرداد 1386, 17:59 عصر
سلام مجدد،
دستور ToDateTime تاریخ در کد بالا تاریخ شمسی را از شما میگیرد و میلادیش را پس میدهد.

سه دستور بعدی در کد بالا تاریخ میلادی را از شما میگیرد و سال و ماه و روز شمسی را پس میدهند.

در نتیجه شما باید مقدار String را که مثلاً 01/03/1386 است بگیرید و آن را به سه عدد Integer مربوط به سال و ماه و روز تبدیل کنید و سه عدد مزبور را به تابع یا متد ToDateTime بدهید و معادل میلادی آن را بگیرید و در بانکتان ذخیره کنید.

بعد مجدداً در زمان نمایش میلادی را از بانک بخوانید و به کمک آن سه دستور پشت سر هم آن را به شمسی تبدیل کنید و به کاربرتان نشان دهید.

بدون نیاز به DLL خارجی به راهتی میتوانید اعمال فوق را انجام دهید ولی باز اگر میبینید مشکل دارید (مثلاً در تبدیل اولیه String مثل 01/03/1386 به سه عدد و...) می توانید از DLL کمکی هم استفاده کنید.

art2000ir
سه شنبه 01 خرداد 1386, 23:03 عصر
خیلی ممنونم از توضیح خوب شما .....
میرم اجرا کنم امید وارم به مشکلی بر نخورم

art2000ir
جمعه 04 خرداد 1386, 00:06 صبح
مشکلی که پیش امده اینه که من وقتی تاریخ رو از textbox می گیرم نمیریزه تو متعیر تاریح و میگه که دیتا string هست و نمیتونه در date قرار بگیره
شما تاریخ رو چکونه از کار بر میگیرید

maroot
جمعه 04 خرداد 1386, 01:42 صبح
بهتره به قبل و بعدش کاراکتر # رو اضافه کنی:


ourdate="#" & ourdate & "#"

__H2__
شنبه 05 خرداد 1386, 16:11 عصر
سلام

مشکلی که پیش امده اینه که من وقتی تاریخ رو از textbox می گیرم نمیریزه تو متعیر تاریح و میگه که دیتا string هست و نمیتونه در date قرار بگیره
شما تاریخ رو چکونه از کار بر میگیرید

گفتم باید خودتان به صورت دستی سه مقدار سال و ماه و روز را از دل string بیرون بکشید و از آنها استفاده کنید، البته برای میلادی نمونه اماده ای وجود دارد و میتوان با استفاده از تابع Date.Parse یک string تاریخ میلادی را یک راست به نوع Date تبدیل کرد ولی برای شمسی باید خودتا همچین چیزی بسازید یا از نمونه ای اماده استفاده کنید.


باز هم میگویم که راحت است ولی چون احساس میکنم با این مسئله مشکل دارید یک DLL را معرفی میکنم.
این DLL شامل یک نوع داده با نام IrDate است که خیلی شبیه Date بومی دات نت است و از آن میتوانید به عنوان مرجع راحت تاریخ شمسی استفاده کنید.
مثلاً برای تبدیل رشته string شمسی به تاریخ شمسی کافیت دستور زیر را بنویسید.


Dim str As String
'...
'...
str = "1386/01/02"

'...
'...

Dim X As New IrDate(str)


یا برای تبدیل میلادی به شمسی هم میتوانید از همان New استفاده کنید و هر زمان که بخواهید شمسی را به میلادی تبدیل کنید میتوانید از X.Date استفاده کنید که تاریخ میلادی را باز میگرداند و نیز میتوانید به راحتی تاریخ را مجددا ً به string دیداری تبدیل کنید.


Dim str As String
Dim X As New IrDate(1386,03,05)

str = X.ToString("www d mmmmm yyyy")

'str = شنبه 5 خرداد ماه 1386

توضیحات تبدیل به string (http://www.h-two.info/Products/H2GBN/Default.aspx?Item=IrDate.ToString)
دانلود مستقیم (http://www.h-two.info/Download.aspx?File=H2GBN.dll.zip)

kourosh_ag
شنبه 05 خرداد 1386, 23:59 عصر
شما میتونید دربانک هم فیلد مربوط به تاریخ رو Char کنید و همون تاریخ شمسی رو به صورت String ذخیره کنید. در صورتی که جایی نیاز به مقایسه تاریخ ها داشتید اون وقت اون ها رو به تاریخ تبدیل کنید.
ولی بهترین کار اینه که یک تاریخ پیش فرض در سیستمتون داشته باشید مثلا 01/01/1370 و بعد به جای ذخیره خوده تاریخ اختلاف روزها را با این تاریخ پیش فرض ذخیره کنید که دارای محاسن بیشتری هم هست

art2000ir
یک شنبه 06 خرداد 1386, 15:19 عصر
با شکر از شما
به نظر روش بدی نمیاد حالا سوال اینه که چگونه string را به date تبدیل کنیم ؟

maroot
دوشنبه 07 خرداد 1386, 00:54 صبح
پست شماره 7 رو بخون متوجه میشی

londonsme
دوشنبه 07 خرداد 1386, 02:31 صبح
salam baraye farsi shodan dar tamame mohitha man ta 20 khordada baraye tean barname mifresatam ta rahatar bashid
farsi shodam tarikhsh shamsi
farsi shodan baraye vorod etlat
farsi shodan baraye khorojiha

art2000ir
دوشنبه 07 خرداد 1386, 09:14 صبح
پست شماره 7 رو بخون متوجه میشی

به نظرم میاد اون کار برای جستجو باشه اما یک string را به date تبدیل نمیکنه چون وقتی این کار را انجام میدم بازم همون ارور متغیر استرینگ و داخل date قرار نمیگیره میاد
من وقتی می خوام بین دو تا تاریخ جستجو کنم از اون کار استفاده می کنم

__H2__
دوشنبه 07 خرداد 1386, 12:25 عصر
سلام
من فکر میکردم مشکل از اول تبدیل String به Date بود ؟؟؟؟!!!!!!
گفتم یا باید به صورت دستی سه مقدار مورد نظر را از دل String بیرون بکشید (که شاید کمی کدنویسی بخواهد) یا از یک DLL کمکی استفاده کنید.
مجدداً به پست 8 و مخصوصاً کد اول نگاه کنید!!! یک String را به Date تبدیل میکند! غیر از این است؟؟؟؟؟



بهتره به قبل و بعدش کاراکتر # رو اضافه کنی:


ourdate="#" & ourdate & "#"


این را هم اصلاً نمیدانم دوست عزیزمان از کجا پیدا کردند؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
تازه اگر کد درستش هم باشد باز برای برای شمسی جواب نمیدهد و درستش هم این است.


Dim ourdate As Date = CDate(ourdate)

maroot
سه شنبه 08 خرداد 1386, 02:18 صبح
اینکه مشکل تاریخ شمسی حل نمیشه، حق با شماست و برای رفع این قضیه به نظر من هم بهترین کار ذخره کردن تاریخ به میلادیست که هر وقت نیاز به خواندن آن بود مجددا به شمسی تبدیل می کنیم.
اما فرق نوع date البته وقتی که short باشه با string دراینه که ابتدا و انتهای اون از کاراکتر # استفاده شده. و شما با این کار می تونید به راحتی از متغیرتون در جستجوهای sql و یا تبدیل ها استفاده کنید