PDA

View Full Version : مشکل در استفاده از persiancalender در .Net



zahracomputer
جمعه 11 آبان 1386, 20:29 عصر
سلام دوستان
من برای تبدیل تاریخ میلادی به شمسی میخوام از persiancalender خود .NET استفاده کنم ، برای این منظور یک کلاس به صورت زیر تعریف کرده ام:


publicclassPcalendar
{
PersianCalendar Calend = newPersianCalendar();
DateTime Now = newDateTime();
publicstring WhatDay()
{
int iDayOfMonth = Calend.GetDayOfMonth(Now);
int iMonth = Calend.GetMonth(Now);
int iYear = Calend.GetYear(Now);
return iDayOfMonth.ToString() + "/" + iMonth.ToString ()+ "/" + iYear.ToString();
}
publicstring WhatDayToString()
{
int iDayOfMonth = Calend.GetDayOfMonth(Now);
int iDayOfWeek = Convert.ToInt32(Calend.GetDayOfWeek(Now));
int iMonth = Calend.GetMonth(Now);
int iYear = Calend.GetYear(Now);
string[] SMonth = {"فرورد?ن", "ارد?بهشت", "خرداد", "ت?ر", "مرداد", "شهر?ور", "مهر", "آبان", "آذر", "د?",
"بهمن", "اسفند"};
string[] SDay = { "?ک شنبه", "دوشنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
return (SDay[iDayOfWeek].ToString() + " , " + iDayOfMonth+ " " + SMonth[iMonth - 1].ToString() + " , " + iYear.ToString());
}
public Pcalendar()
{
//
// TODO: Add constructor logic here
//
}
}

و در برنامه به شکل زیر از آن استفاده کرده ام:


protectedvoid Page_Load(object sender, EventArgs e)
{
Pcalendar pca = newPcalendar();
Label1.Text = pca.WhatDay();
}

ول‍ی هنگام اجرا خطای زیر را میدهد
Specified time is not supported in this calendar. It should be between 03/21/0622 00:00:00 (Gregorian date) and 12/31/9999 23:59:59 (Gregorian date), inclusive.
Parameter name: time
که این خطا را روی خط زیر نشان میدهد

int iDayOfMonth = Calend.GetDayOfMonth(Now);

با تشکر

mp2009
شنبه 12 آبان 1386, 01:03 صبح
چرا از persia.dll استفاده نمیکنی؟

mohsen_csharp
شنبه 12 آبان 1386, 02:53 صبح
کافی این خط را :

DateTime Now = newDateTime();
اینگونه اصلاح کنی :


DateTime Now = DateTime.Now;

mp2009
یک شنبه 13 آبان 1386, 00:21 صبح
از متد های persia .dll استفاده کن خیلی راحت میتونی با تاریخ ها کار کنی

karimi84
یک شنبه 13 آبان 1386, 07:55 صبح
برای تبدیل تاریخ شمسی به میلادی و برعکس از توابع زیر استفاده کنید

public DateTime DateInOtherCalendar( DateTime aDate , Calendar OtherCalender )
{
int Year = OtherCalender.GetYear(aDate);
int Month = OtherCalender.GetMonth(aDate);
int Day = OtherCalender.GetDayOfMonth(aDate);
DateTime DateInOtherCalendar = new DateTime(Year, Month, Day);
return DateInOtherCalendar;
}

مثال از شمسی به میلادی
private void button1_Click(object sender, EventArgs e)
{
//An Iranian Date : 19 Mehr 1359
DateTime PersianDate = new DateTime( 1359, 7, 19, new PersianCalendar() );
GregorianCalendar Gregorian = new GregorianCalendar( );

Text = DateInOtherCalendar(PersianDate, Gregorian).ToString();
}
مثال از میلادی به شمسی
private void button1_Click(object sender, EventArgs e)
{ //A Gregorain Date 25 January 2006
DateTime GregorianDate = new DateTime( 2006, 1, 25, new GregorianCalendar() );
PersianCalendar Persian = new PersianCalendar( );

Text = DateInOtherCalendar(GregorianDate, Persian).ToString();
}

yakamous
سه شنبه 12 بهمن 1389, 13:48 عصر
با سلام دوستان من از persian calender برای نمایش تاریخ به صورت (سه شنبه 12 بهمن 1389) استفاده کردم ولی نمی دونم چرا روز رو دو روز جلوتر نشون می ده مثلا به جای سه شنبه ٰ پنج شنبه در نظر می گیره؟ آیا pc خطای دیکد روز داره؟ اینم کد تابع منه

public static string DecodeDate(DateTime dt)
{
PersianCalendar pc = new PersianCalendar();
DateTime now = DateTime.Now;
string date, day, month;
day = month = "";
switch (pc.GetDayOfWeek(dt))
{
case System.DayOfWeek.Saturday:
day = "¬ë ى";
break;
case System.DayOfWeek.Sunday:
day = "یک ¬ë ى";
break;
case System.DayOfWeek.Monday :
day = "§ي¬ë ى";
break;
case System.DayOfWeek.Thursday :
day = "«ى ¬ë ى";
break;
case System.DayOfWeek.Wednesday:
day = "چىں©¬ë ى";
break;
case System.DayOfWeek.Tuesday :
day = "پë¤ ¬ë ى";
break;
case System.DayOfWeek.Friday:
day = "¤êمى";
break;
}
switch (pc.GetMonth(dt))
{
case 1:
month = "ه©ي©§یë";
break;
case 2:
month = "ں©§ی ى¬¢";
break;
case 3:
month = "¦©§ں§";
break;
case 4:
month = "¢ی©";
break;
case 5:
month = "ꩧں§";
break;
case 6:
month = "¬ى©یي©";
break;
case 7:
month = "êى©";
break ;
case 8:
month = "™ ںë";
break ;
case 9:
month = "™¨©";
break ;
case 10:
month = "§ی";
break ;
case 11:
month = " ىêë";
break ;
case 12:
month = "ں«هë§";
break ;
}
date = day + " " + pc.GetDayOfMonth(now) + " " + month + " «ںé " + pc.GetYear(now);
return date;
}