نمایش نتایج 1 تا 8 از 8

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

  1. #1

    تبديل تاريخ ميلادي به شمسي

    سلام دوستان
    من در حال نوشتن يه پرو‍ژه بودم كه نياز به گزارش گيري شدم كه در اون بايد تاريخ و به شمسي نمايش مي دادم واسه همين به دنبال روشي براي اين كار گشتم تنها راهي كه پيدا كردم استفاده از dll هايي كه تعداي از برنامه نويسا واسه تبديل تاريخ نوشته بودن كه يه كم استفاده از اونا مشكل بود منم يه تابع براي اينكار نوشتم اين كد به زبان C#‎‎ و تو بخش گزارش گيري تابع فرموله اون براي كريستال ريپورت رو هم قرار مي دم
    اين كد براي 1000 سال تست شده!!!
    class PersianDate
    {
    public String PersianDate(DateTime date)
    {
    int[] DaysToMonth365 = new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
    int[] DaysToMonth366 = new int[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
    int[] DaysToMonth = new int[] { 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 };
    int[] LeapYears33 = new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 };
    bool IsLeapYear;
    int year = date.Year;
    int day = date.Day;
    int month = date.Month;
    if ((year % 4) != 0)
    {
    IsLeapYear = false;
    }
    else if ((year % 100) == 0)
    {
    IsLeapYear = (year % 400) == 0;
    }
    else
    IsLeapYear = true;
    int[] numArray1;
    if (IsLeapYear)
    numArray1 = DaysToMonth366;
    else
    numArray1 = DaysToMonth365;

    int num1 = year - 1;
    int num2 = ((((((num1 * 365) + (num1 / 4)) - (num1 / 100)) + (num1 / 400)) + numArray1[month - 1]) + day) - 1;
    long num4 = num2 + 1;
    int PersianYear = ((int)(((num4 - 226894) * 33) / ((long)12053))) + 1;

    int numtmp2 = (PersianYear - 1) / 33;
    int yeartmp = (PersianYear - 1) % 33;
    long num5 = (numtmp2 * 12053) + 226894;
    while (yeartmp > 0)
    {
    num5 = num5 + 365;
    if (LeapYears33[yeartmp % 33] == 1)
    {
    num5 = num5 + 1;
    }
    yeartmp = yeartmp - 1;
    }
    MessageBox.Show(num5.ToString() );
    long num6;
    if (PersianYear == 9378)
    {
    num6 = DaysToMonth[9] + 10;
    }
    else if (!(LeapYears33[PersianYear % 33] == 1))
    {
    num6 = 365;
    }
    else
    num6 = 366;
    if (num4 < num5)
    {
    num5 = num5 - num6;
    PersianYear = PersianYear - 1;
    }
    else if (num4 == num5)
    {
    PersianYear = PersianYear - 1;
    int temp;
    if (PersianYear == 9378)
    {
    temp = DaysToMonth[9] + 10;
    }
    else if (!(LeapYears33[PersianYear % 33] == 1))
    {
    temp = 365;
    }
    else
    temp = 366;
    num5 = num5 - temp;
    }
    else
    {
    if (num4 > (num5 + num6))
    {
    num5 = num5 + num6;
    PersianYear=PersianYear+1 ;
    }
    }

    num4= num4 - num5;
    int num12 = 0;
    while ((num12 < 12) && (num4 > DaysToMonth[num12]))
    {
    num12=num12+1;
    }
    int num3 = ((int)num4) - DaysToMonth[num12 - 1];
    return PersianYear.ToString()+"/" + num12.ToString()+"/"+ num3.ToString() ;
    }
    }

    اين هم لينك كريستال ريپورت
    https://barnamenevis.org/showth...768#post939768
    آخرین ویرایش به وسیله behzad1986 : یک شنبه 08 فروردین 1389 در 08:44 صبح

  2. #2
    کاربر دائمی آواتار happy65_sh
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    شهر بادگیرها
    پست
    372

    نقل قول: تبديل تاريخ ميلادي به شمسي

    سلام
    چرا از persionCalender استفاده نكردي؟خيلي راحته و با 5 خط كد تاريخ ميلادي را مي توني به شمسي تبديل كني.

  3. #3

    نقل قول: تبديل تاريخ ميلادي به شمسي

    چون مي خواستم تابع كيرستال ريپورت و تابعشو تو sqL بنويسم و واسه اينكه از persian Calendar استفاده نكنم!!!!!!!!!!!!!

  4. #4
    کاربر دائمی آواتار teardrop
    تاریخ عضویت
    مهر 1388
    محل زندگی
    همدان
    پست
    139

    Wink نقل قول: تبديل تاريخ ميلادي به شمسي

    به نام خدا
    از این استفاده کن خیلی امکانات میده.
    فایل های ضمیمه فایل های ضمیمه

  5. #5

    نقل قول: تبديل تاريخ ميلادي به شمسي

    اين كلاس مخصوصا تو يه تابع نوشته شده كه به راحتي قابل تبديل به زبان هاي ديگه و بخصوص زبانهايي كه مبتني بر .net نيستند بشه!!!!!!!!!!
    كلاس كاملترش هست اگه دوستان بخوان فايلشو واسه استفاده مي زارم!!!!!!

  6. #6
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبديل تاريخ ميلادي به شمسي

    دوست عزیز میتونی تابع sql رو بذاری من لازمش دارم ممنون می شم.

  7. #7

    Smile نقل قول: تبديل تاريخ ميلادي به شمسي

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

  8. #8
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبديل تاريخ ميلادي به شمسي

    سلام علی آقا خوبید راستی می خواستم ببینم از این DLL شما می شه تویه sql استفاده کرد؟ چه کار باید بکنبم من از sql 2008 استفاده می کنم.

قوانین ایجاد تاپیک در تالار

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