تبلیغات :
دانلود فیلم جدید
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 6 از 6

نام تاپيک: تبدیل تاریخ میلادی به هجری در سی شارپ

  1. #1
    داره خودمونی میشه
    تاريخ عضويت
    Apr 2007
    پست ها
    32

    14 تبدیل تاریخ میلادی به هجری در سی شارپ

    می خواستم برنامه ای بنویسم مثل برنامه date and time در ویندوز ولی با این فرق که وقتی تاریخ میلادی را انتخاب می کنیم تاریخ هجری هم نمایش بدهد

    ممنون می شم اگه کمک کنید

  2. #2
    حـــــرفـه ای
    تاريخ عضويت
    Aug 2006
    پست ها
    793

    پيش فرض

    سلام.
    برای مجموعه Net. یه Library رایگان نوشته شده برای تبدیل تاریخها که میتونین از اون استفاده کنین.
    از لینک زیر میتونین بگیرینش :
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

  3. #3
    داره خودمونی میشه
    تاريخ عضويت
    Apr 2007
    پست ها
    32

    پيش فرض می شه اشکالات این برنامه را بگیرید

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



    privatevoid button1_Click(object sender, EventArgs e)
    {
    int yyy = DateTime.Now.Year;
    int mmm = DateTime.Now.Month;
    int ddd = DateTime.Now.Day;
    label1.Text =
    Convert.ToString(yyy + "/" + mmm + "/" + ddd);
    int y=DateTime .Now.Year ;
    int m=DateTime .Now .Month ;
    int d=DateTime .Now .Day;
    int yy,mm,dd;
    int[] a ={ 0, 10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9 };
    int[] b ={ 0, 30, 30, 29, 31, 31, 31, 31, 31, 31, 30, 30, 30 };
    yy=y-621;
    if ((y%4==0)&&(m==3)&&(d>=21))
    {
    a[3]++;
    b[3]++;
    }
    if (dd > b[m])
    {
    dd -= b[m];
    mm++;
    lbl1.Text =
    Convert.ToString(yy + "/" + mm + "/" + dd);
    }


    if (m >= 4)
    {
    mm = m - 3;
    dd = d + a[m];
    lbl1.Text =
    Convert.ToString(yy + "/" + mm + "/" + dd);
    }
    else
    {
    yy = y - 622;
    mm = m + 9;
    dd = d + a[m];
    lbl1.Text =
    Convert.ToString(yy + "/" + mm + "/" + dd);

    }
    }

    اینم فرمم

  4. #4
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    عجیب است که هنوز برنامه نویسات دات نت نمیدانند که کلاسس بومی System.Globalization.PersianCalendar برای تبدیلات هجری شمسی به صورت ذاتی در دات نت وجود دارد!!!!

  5. #5
    داره خودمونی میشه
    تاريخ عضويت
    Apr 2007
    پست ها
    32

    13 حل سوال

    من برنامه را خودم نوشتم ودرست کار میکنه فقط اشکالی که داره وقتی به روز29اسفند می رسه به بعد به جای اینکه اول فروردین را نشان دهد می نویسد1/13/1386هر کار کردم درست نشد و این اشکال تا پایان ماه march ادامه دارد ولی از اول ماه April درست می شود




    کد برنامه اینه:




    privatevoid button1_Click(object sender, EventArgs e)
    {
    int yy= DateTime.Now.Year;
    int mm = DateTime.Now.Month;
    int dd = DateTime.Now.Day;
    int year = DateTime.Now.Year;
    int month = DateTime.Now.Month;
    int day = DateTime.Now.Day;
    int y, m, d;
    int[] A ={ 0, 10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9 };
    int[] B ={ 0, 30, 30, 29, 31, 31, 31, 31, 31, 31, 30, 30, 30 };
    y = year - 621;
    if ((year % 4 == 0) && (month == 3) && (day >= 21))
    {
    A[3]++;
    B[3]++;
    }
    if (month >= 4)
    m = month - 3;
    else
    m = month + 9;
    d = day + A[month];
    if (d > B[month])
    {
    d -= B[month];
    m++;
    }

    if ((m == 10) || (m == 11) || (m == 12))
    y--;
    shamsi.Text =
    Convert.ToString(y + "/" + m + "/" + d);
    miladi.Text =
    Convert.ToString(yy + "/" + dd + "/" + mm);
    }
    }
    }



    ممنون می شم جواب بدید







    در ضمن منم میدونم که در دات نت همچین امکاناتی وجود داره ولی می خواستم خودم برنامه اش را بنویسم.

  6. #6
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    خیلی خیلی خیلی خیلی خیلی به توان 0/1 میبخشید!!!! ولی کد شما ارزش ندارد!!!!! چاکریم!
    تضمین میدهم که با روش فوق اگر هم درست کار کند هیچ اعتباری برای درست کار کردن آن در سال بعد نیست، باید کبیسه های 4 ساله و 5 ساله به شدت لحاظ شوند که حتی در کدهای به ظاهر کاملی که من دیدم هیچ یک کبیسه های پنج سال را لحاظ نکرده بودند و برنامه شان بدون شک برای بعد سال سال ؟140 درست جواب نمیدهد و نیز قبل از 1370 یا حتی 1375 .

    الگوریتم صحیح تبدیل اصلاً اینطوری نیست، باید جور دیگری فکر کنید! آنگاه قضیه خیلی راحت و دقیق میشود!
    اگر میخواهید باید الگوریتم شما بر مبنای تعداد روز گذشته از مبدا باشد.


    یعنی تاریخ شمسی را تبدیل کنید به تعداد کل روزهای گذشته شده از اول هجرت!!!!
    زیاد هم سخت نیست برابر است با :
    تعداد روزهای گذشته شده از اول همان سال + تعداد سالهای قبل * 365 + تعداد سالهای قبلی کبیسه 4 ساله + تعداد سالهای قبلی کبیسه 5 ساله (1)
    بعد هم مشخص است مقدار شمسی را به علاوه اختلاف تعداد روزهای میلادی شمسی میکنید (که با یک کالیبراسیون به راحتی بدست میآید) و به همین راحتی تعداد روزهای گذشته از اول میلاد حضرت مسیح را بدست می آوردید. (2)
    خود دات نت در ذات تاریخ را به صورت تعداد 100 نانو ثانیه گذشته از اول میلاد نگه میدارد، در نتیجه جمع و تفریق تاریخ ها هم بدوم توجه به تعداد ثانیه در دقیقه ... روز و هزار جفنگیات دیگه ! به راحتی و سرعت تفریق و جمع دو عدد صحیح انجام میشود، و بعد در زمان نمایش تاریخ سریعاً این عدد را بع روز و ماه و سال و... تبدیل کرده و نشان میدهد.
    در نتیجه عددی را که در مرحله (2) بدست آورید در 10000000 * 60 * 60* 24 ضرب میکنید و حاصل تاریخ میلادی است!

    برای برعکی هم به همین ترتیب اول عدد ticks های تاریخ میلادی را بر 10000000 * 60 * 60 * 24 تقسیم میکنید تا به تعداد روز برسید و آن را از اختلاف تعداد روز میلادی و شمسسی کم میکنید تا به تعداد روز از اول هجرت برسید و آنگاه برعکس معادله (1) را انجام میدهید.



    به این سختی ها که به نظر میرسد نیست! دقیق و راحت است و با این اوصاف جمع و تفریق دو تاریخ هم واقعاً بچه گانه و سریع و البته دقیق میشود.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •