PDA

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



Xcalivorse
جمعه 04 مرداد 1387, 15:40 عصر
نمی دونم چرا با وجود کلاس PersianCalendar برنامه نویسان دات نت چرا اینقدر دنبال کامپوننت های تبدیل تاریخ میلادی به شمسی میگرددند. باور ندارید یه Search تو تالار بزنید میبینید. مخصوصا تالار VB.Net.
با کد زیر به راحتی آب خوردن میتونید تاریخ میلادی رو تبدیل به تاریخ شمسی بکنید.


PersianCalendar PersianCalendar1 = new PersianCalendar();
DateTime Date1 = DateTime.Now;
int Year = PersianCalendar1.GetYear(Date1);
int Month = PersianCalendar1.GetMonth(Date1);
int day = PersianCalendar1.GetDayOfMonth(Date1);
String PersianDate = Year.ToString() + "\\" + Month.ToString() + "\\" + day.ToString();
MessageBox.Show(PersianDate);

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

Xcalivorse
جمعه 04 مرداد 1387, 18:49 عصر
سوال اینه که اگر تنظیمات سیستم کاربر روی فارسی تنظیم نشده باشه بازهم کار میکنه ؟

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

Xcalivorse
شنبه 05 مرداد 1387, 14:18 عصر
راستی ببخشید یادم رفت. برای استفاده از کد ذکر شده می بایستی فضای نام System.Globalization رو به برنامه اضافه کنید.


using System.Globalization;

linux
شنبه 05 مرداد 1387, 14:52 عصر
نمی دونم چرا با وجود کلاس PersianCalendar برنامه نویسان دات نت چرا اینقدر دنبال کامپوننت های تبدیل تاریخ میلادی به شمسی میگرددند. باور ندارید یه Search تو تالار بزنید میبینید. مخصوصا تالار VB.Net.
با کد زیر به راحتی آب خوردن میتونید تاریخ میلادی رو تبدیل به تاریخ شمسی بکنید.


PersianCalendar PersianCalendar1 = newPersianCalendar();
DateTime Date1 = DateTime.Now;
int Year = PersianCalendar1.GetYear(Date1);
int Month = PersianCalendar1.GetMonth(Date1);
int day = PersianCalendar1.GetDayOfMonth(Date1);
String PersianDate = Year.ToString() + "\\" + Month.ToString() + "\\" + day.ToString();
MessageBox.Show(PersianDate);

حالا سوال من اینکه مگه این کلاس ( با وجود اینکه حتی سال کبیسه رو هم حساب میکنه) مگه چه مشکلی داره که از کامپوننت استفاده می کنید ؟
از کی تا حالا تقویم را به این صورت نشان می دهند؟ 10\01\1387??
از این کد استفاده کنید

persiandate=string.format("{0}/{1}/{2}",year,month,day);

Xcalivorse
شنبه 05 مرداد 1387, 14:55 عصر
قصد نشون دادنش نبود. قصد معرفی کلاس بود. با این حال ممنون از یاد آوریتون.

Javad_Mail
شنبه 05 مرداد 1387, 16:21 عصر
من شنيده بودم كه يه Bug داره اما خودم نديدم تا الان

Xcalivorse
شنبه 05 مرداد 1387, 20:17 عصر
نه تا اینجا که من باش کار کردم هیچ مشکل و باگی نداره و میتونی با خیال راحت باهاش کار کنی.

H2K
یک شنبه 06 مرداد 1387, 23:57 عصر
سلام
به لینک زیر هم سر بزنید.
http://barnamenevis.org/forum/showthread.php?p=162337
تاریخ پست فوق(آبان 1384, !!!)
موفق باشید

naeeme
سه شنبه 08 مرداد 1387, 13:37 عصر
من شنيده بودم كه يه Bug داره اما خودم نديدم تا الان

من سالهای بسیار دور رو هم امتحان کردم( از سال 1190 هجری شمسی تا امسال البته به طور پراکنده) اما ایرادی توش ندیدم. فقط یه سختی کوچولو داره، اینکه تاریخ شمسی رو نمیشه در متغییری از جنس datetime نگه داری کرد.

Xcalivorse
سه شنبه 08 مرداد 1387, 20:11 عصر
من سالهای بسیار دور رو هم امتحان کردم( از سال 1190 هجری شمسی تا امسال البته به طور پراکنده) اما ایرادی توش ندیدم. فقط یه سختی کوچولو داره، اینکه تاریخ شمسی رو نمیشه در متغییری از جنس datetime نگه داری کرد.
تا باشه از این سختی ها باشه. برای نگه داریش میتونید یه کلاس تعریف کنید و با تعریف مجدد عملگرهای کلاس، قابلیت تفریق و جمع دو تاریخ رو با هم بدید.

sinpin
سه شنبه 08 مرداد 1387, 21:17 عصر
لطفا از ارسال موضوعات قديمي و تكراري خودداري و در صورت تمايل بحث را در تاپيك زير ادامه دهيد :
http://barnamenevis.org/forum/showthread.php?p=162337