تبدیل تاریخ شمسی به میلادی در آندروید به زبان برنامه نویسی جاوا

۴ سال پیش(به روز شده در ۴ سال پیش) جاوا(اندروید) ۱

مشخصات تصویر: ۶۸.۹۹ کیلو بایت , ۵۳۰x۴۰۰ پیکسل , jpg , Android-Logo-4
جزییات تصویر:
منبع تصویر: اینترنت

کدی که قرار است برای شما بنویسیم در این وبسایت به چند زبان نوشته شده است. یعنی از یک الگوریتم خاص که همه ی آنها از آن نشات می گیرند. کد زیر دارای سه تابع است که تابع اول و دوم مربوط به مشخص نمودن کبیسه بودن سال میلادی و شمسی است و تابع سوم مربوط به تابع تبدیل تاریخ میلادی به شمسی است.

    public boolean gLeapYear(int year) {
        if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))
            return true;
        else
            return false;
    }
 
    public boolean sLeapYear(int year) {
        int[] ary = {1, 5, 9, 13, 17, 22, 26, 30};
        boolean result = false;
        int b = year % 33;
        if (Arrays.asList(ary).contains(b))
            result = true;
        return result;
    }
 
    public String shamsiDate(int gyear, int gmonth, int gday) {
        int[] _gl = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
        int[] _g = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
 
        int deydiffjan = 10;
        int gd = 0;
        int sd = 0;
        int sm = 0;
        int gmod = 0;
        int sy = 0;
 
        if (gLeapYear(gyear - 1))
            deydiffjan = 11;
        if (gLeapYear(gyear))
            gd = _gl[gmonth - 1] + gday;
        else
            gd = _g[gmonth - 1] + gday;
        if (gd > 79) {
            sy = gyear - 621;
            gd = gd - 79;
            if (gd <= 186) {
                gmod = gd % 31;
                switch (gmod) {
                    case 0:
                        sd = 31;
                        sm = (int) (gd / 31);
                        break;
                    default:
                        sd = gmod;
                        sm = (int) (gd / 31) + 1;
                }
            } else {
                gd = gd - 186;
                gmod = gd % 30;
                switch (gmod) {
                    case 0:
                        sd = 30;
                        sm = (int) (gd / 30) + 6;
                        break;
                    default:
                        sd = gmod;
                        sm = (int) (gd / 30) + 7;
                }
            }
        } else {
            sy = gyear - 622;
            gd = gd + deydiffjan;
            gmod = gd % 30;
            switch (gmod) {
                case 0:
                    sd = 30;
                    sm = (int) (gd / 30) + 9;
                    break;
                default:
                    sd = gmod;
                    sm = (int) (gd / 30) + 10;
            }
        }
 
        return String.valueOf(sy) + '/' + String.valueOf(sm) + '/' + String.valueOf(sd);
    }

1 نظر

gravatar  محمود
۳ سال پیش - بررسی شده - نوشته شده توسط مهمان

همچنین میتونید از این library استفاده کنید که Immutable هست و API آسونی داره:

https://github.com/mfathi91/persian-date-time