بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
سینا 11 سال پیش
آخرین تغییر: 10 سال پیش

لینک کلاس تبدیل تاریخ

برای استفاده کدهای زیر را در اکتیویتی وارد کنید:

// دریافت زمان کنونی سیستم
Calendar cal = Calendar.getInstance();

int mYear = cal.get(Calendar.YEAR);
int mMonth = cal.get(Calendar.MONTH) + 1;
int mDay = cal.get(Calendar.DAY_OF_MONTH);

Roozh jCal = new Roozh(); // ایجاد یک نمونه از کلاس تبدیل تاریخ
jCal.GregorianToPersian(mYear, mMonth, mDay); // دادن تاریخ کنونی سیستم به متد تبدیل تاریخ میلادی به شنسی

متدهای دریافت اطلاعات:

int year = jCal.getYear(); // سال شمسی

int month = jCal.getMonth(); // ماه شمسی

int day = jCal.getDay(); // روز شمسی

String convertedDate = jCal.toString(); //year-month-day

نظرات

سینا 11 سال پیش
با اضافه کردن switch-case ساده به کلاس تبدیل تاریخ می توان ماه ها را بر اساس اسم آن ها نیز دریافت کرد.
Lamanta 10 سال پیش
من ازین کلاس برای تبدیل شمسی به میلادی استفاده کردم اما تاریخ امروز که 9 / 12 / 1394 هست رو 29 / 1 / 2016 تشخیص میده در حالی که باید 28 / 2 / 2016 تشخیص بده ، چطوریاس ؟
Lamanta 10 سال پیش
ماه رو به علاوه یک کردم مشکل حل شد....

پاسخ‌ها 2

Devtpoint 11 سال پیش

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


public class ConvertToPersian {

private int day, month, year;

private int jY, jM, jD;
private int gY, gM, gD;
private int leap, march;

/**
* Calculates the Julian Day number (JG2JD) from Gregorian or Julian
* calendar dates. This integer number corresponds to the noon of the date
* (i.e. 12 hours of Universal Time). The procedure was tested to be good
* since 1 March, -100100 (of both the calendars) up to a few millions
* (10**6) years into the future. The algorithm is based on D.A. Hatcher,
* Q.Jl.R.Astron.Soc. 25(1984), 53-55 slightly modified by me (K.M.
* Borkowski, Post.Astron. 25(1987), 275-279).
*
* @param year
* <code>int</code>
* @param month
* <code>int</code>
* @param day
* <code>int</code>
* @param J1G0
* to be set to 1 for Julian and to 0 for Gregorian calendar
* @return Julian Day number
*/
private int JG2JD(int year, int month, int day, int J1G0) {
int jd = (1461 * (year + 4800 + (month - 14) / 12)) / 4
+ (367 * (month - 2 - 12 * ((month - 14) / 12))) / 12
- (3 * ((year + 4900 + (month - 14) / 12) / 100)) / 4 + day
- 32075;

if (J1G0 == 0)
jd = jd - (year + 100100 + (month - 8) / 6) / 100 * 3 / 4 + 752;

return jd;
}

/**
* Calculates Gregorian and Julian calendar dates from the Julian Day number
* (JD) for the period since JD=-34839655 (i.e. the year -100100 of both the
* calendars) to some millions (10**6) years ahead of the present. The
* algorithm is based on D.A. Hatcher, Q.Jl.R.Astron.Soc. 25(1984), 53-55
* slightly modified by me (K.M. Borkowski, Post.Astron. 25(1987), 275-279).
*
* @param JD
* Julian day number as <code>int</code>
* @param J1G0
* to be set to 1 for Julian and to 0 for Gregorian calendar
*/
private void JD2JG(int JD, int J1G0) {
int i, j;

j = 4 * JD + 139361631;

if (J1G0 == 0) {
j = j + (4 * JD + 183187720) / 146097 * 3 / 4 * 4 - 3908;
}

i = (j % 1461) / 4 * 5 + 308;
gD = (i % 153) / 5 + 1;
gM = ((i / 153) % 12) + 1;
gY = j / 1461 - 100100 + (8 - gM) / 6;
}

/**
* Converts the Julian Day number to a date in the Jalali calendar
*
* @param JDN
* the Julian Day number
*/
private void JD2Jal(int JDN) {
JD2JG(JDN, 0);

jY = gY - 621;
JalCal(jY);

int JDN1F = JG2JD(gY, 3, march, 0);
int k = JDN - JDN1F;
if (k >= 0) {
if (k <= 185) {
jM = 1 + k / 31;
jD = (k % 31) + 1;
return;
} else {
k = k - 186;
}
} else {
jY = jY - 1;
k = k + 179;
if (leap == 1)
k = k + 1;
}

jM = 7 + k / 30;
jD = (k % 30) + 1;
}

/**
* Converts a date of the Jalali calendar to the Julian Day Number
*
* @param Jy
* Jalali year as <code>int</code>
* @param Jm
* Jalali month as <code>int</code>
* @param Jd
* Jalali day as <code>int</code>
* @return Julian day number
*/
private int Jal2JD(int jY, int jM, int jD) {
JalCal(jY);
int jd = JG2JD(gY, 3, march, 1) + (jM - 1) * 31 - jM / 7 * (jM - 7)
+ jD - 1;
return jd;
}

/**
* This procedure determines if the Jalali (Persian) year is leap (366-day
* long) or is the common year (365 days), and finds the day in March
* (Gregorian calendar) of the first day of the Jalali year (jY)
*
* @param jY
* Jalali calendar year (-61 to 3177)
*/
private void JalCal(int jY) {
march = 0;
leap = 0;

int[] breaks = { -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210,
1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 };

gY = jY + 621;
int leapJ = -14;
int jp = breaks[0];

int jump = 0;
for (int j = 1; j <= 19; j++) {
int jm = breaks[j];
jump = jm - jp;
if (jY < jm) {
int N = jY - jp;
leapJ = leapJ + N / 33 * 8 + (N % 33 + 3) / 4;

if ((jump % 33) == 4 && (jump - N) == 4)
leapJ = leapJ + 1;

int leapG = (gY / 4) - (gY / 100 + 1) * 3 / 4 - 150;

march = 20 + leapJ - leapG;

if ((jump - N) < 6)
N = N - jump + (jump + 4) / 33 * 33;

leap = ((((N + 1) % 33) - 1) % 4);

if (leap == -1)
leap = 4;
break;
}

leapJ = leapJ + jump / 33 * 8 + (jump % 33) / 4;
jp = jm;
}
}

/**
* Modified <code>toString()</code> method that represents date string
*
* @return Date as <code>String</code>
*/
@Override
public String toString() {
return String.format("%04d-%02d-%02d", getYear(), getMonth(), getDay());
}

/**
* Converts Gregorian date to Persian(Jalali) date
*
* @param year
* <code>int</code>
* @param month
* <code>int</code>
* @param day
* <code>int</code>
*/
public void GregorianToPersian(int year, int month, int day) {
int jd = JG2JD(year, month, day, 0);
JD2Jal(jd);
this.year = jY;
this.month = jM;
this.day = jD;
}

/**
* Converts Persian(Jalali) date to Gregorian date
*
* @param year
* <code>int</code>
* @param month
* <code>int</code>
* @param day
* <code>int</code>
*/
public void PersianToGregorian(int year, int month, int day) {
int jd = Jal2JD(year, month, day);
JD2JG(jd, 0);
this.year = gY;
this.month = gM;
this.day = gD;
}

/**
* Get manipulated day
*
* @return Day as <code>int</code>
*/
public int getDay() {
return day;
}

/**
* Get manipulated month
*
* @return Month as <code>int</code>
*/
public int getMonth() {
return month;
}

/**
* Get manipulated year
*
* @return Year as <code>int</code>
*/
public int getYear() {
return year;

}
}


نظرات

Farnad 11 سال پیش

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

import java.util.Calendar;
import java.util.GregorianCalendar;

public class CalendarTool {
    private int day, month, year;
   
    private int jY, jM, jD;
    private int gY, gM, gD;
    private int leap, march;
 
    /**
     * Calculates the Julian Day number (JG2JD) from Gregorian or Julian
     * calendar dates. This integer number corresponds to the noon of the date
     * (i.e. 12 hours of Universal Time). The procedure was tested to be good
     * since 1 March, -100100 (of both the calendars) up to a few millions
     * (10**6) years into the future. The algorithm is based on D.A. Hatcher,
     * Q.Jl.R.Astron.Soc. 25(1984), 53-55 slightly modified by me (K.M.
     * Borkowski, Post.Astron. 25(1987), 275-279).
     *
     * @param year
     *            <code>int</code>
     * @param month
     *            <code>int</code>
     * @param day
     *            <code>int</code>
     * @param J1G0
     *            to be set to 1 for Julian and to 0 for Gregorian calendar
     * @return Julian Day number
     */
    private int JG2JD(int year, int month, int day, int J1G0) {
        int jd = (1461 * (year + 4800 + (month - 14) / 12)) / 4
                + (367 * (month - 2 - 12 * ((month - 14) / 12))) / 12
                - (3 * ((year + 4900 + (month - 14) / 12) / 100)) / 4 + day
                - 32075;
 
        if (J1G0 == 0)
            jd = jd - (year + 100100 + (month - 8) / 6) / 100 * 3 / 4 + 752;
 
        return jd;
    }
 
    /**
     * Calculates Gregorian and Julian calendar dates from the Julian Day number
     * (JD) for the period since JD=-34839655 (i.e. the year -100100 of both the
     * calendars) to some millions (10**6) years ahead of the present. The
     * algorithm is based on D.A. Hatcher, Q.Jl.R.Astron.Soc. 25(1984), 53-55
     * slightly modified by me (K.M. Borkowski, Post.Astron. 25(1987), 275-279).
     *
     * @param JD
     *            Julian day number as <code>int</code>
     * @param J1G0
     *            to be set to 1 for Julian and to 0 for Gregorian calendar
     */
    private void JD2JG(int JD, int J1G0) {
        int i, j;
 
        j = 4 * JD + 139361631;
 
        if (J1G0 == 0) {
            j = j + (4 * JD + 183187720) / 146097 * 3 / 4 * 4 - 3908;
        }
 
        i = (j % 1461) / 4 * 5 + 308;
        gD = (i % 153) / 5 + 1;
        gM = ((i / 153) % 12) + 1;
        gY = j / 1461 - 100100 + (8 - gM) / 6;
    }
 
    /**
     * Converts the Julian Day number to a date in the Jalali calendar
     *
     * @param JDN
     *            the Julian Day number
     */
    private void JD2Jal(int JDN) {
        JD2JG(JDN, 0);
 
        jY = gY - 621;
        JalCal(jY);
 
        int JDN1F = JG2JD(gY, 3, march, 0);
        int k = JDN - JDN1F;
        if (k >= 0) {
            if (k <= 185) {
                jM = 1 + k / 31;
                jD = (k % 31) + 1;
                return;
            } else {
                k = k - 186;
            }
        } else {
            jY = jY - 1;
            k = k + 179;
            if (leap == 1)
                k = k + 1;
        }
 
        jM = 7 + k / 30;
        jD = (k % 30) + 1;
    }
 
    /**
     * Converts a date of the Jalali calendar to the Julian Day Number
     *
     * @param Jy
     *            Jalali year as <code>int</code>
     * @param Jm
     *            Jalali month as <code>int</code>
     * @param Jd
     *            Jalali day as <code>int</code>
     * @return Julian day number
     */
    private int Jal2JD(int jY, int jM, int jD) {
        JalCal(jY);
        int jd = JG2JD(gY, 3, march, 1) + (jM - 1) * 31 - jM / 7 * (jM - 7)
                + jD - 1;
        return jd;
    }
 
    /**
     * This procedure determines if the Jalali (Persian) year is leap (366-day
     * long) or is the common year (365 days), and finds the day in March
     * (Gregorian calendar) of the first day of the Jalali year (jY)
     *
     * @param jY
     *            Jalali calendar year (-61 to 3177)
     */
    private void JalCal(int jY) {
        march = 0;
        leap = 0;
 
        int[] breaks = { -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210,
                1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 };
 
        gY = jY + 621;
        int leapJ = -14;
        int jp = breaks[0];
 
        int jump = 0;
        for (int j = 1; j <= 19; j++) {
            int jm = breaks[j];
            jump = jm - jp;
            if (jY < jm) {
                int N = jY - jp;
                leapJ = leapJ + N / 33 * 8 + (N % 33 + 3) / 4;
 
                if ((jump % 33) == 4 && (jump - N) == 4)
                    leapJ = leapJ + 1;
 
                int leapG = (gY / 4) - (gY / 100 + 1) * 3 / 4 - 150;
 
                march = 20 + leapJ - leapG;
 
                if ((jump - N) < 6)
                    N = N - jump + (jump + 4) / 33 * 33;
 
                leap = ((((N + 1) % 33) - 1) % 4);
 
                if (leap == -1)
                    leap = 4;
                break;
            }
 
            leapJ = leapJ + jump / 33 * 8 + (jump % 33) / 4;
            jp = jm;
        }
    }
 
    /**
     * Modified <code>toString()</code> method that represents date string
     *
     * @return Date as <code>String</code>
     */
    @Override
    public String toString() {
        return String.format("%04d/%02d/%02d", getYear(), getMonth(), getDay());
    }
 
    /**
     * Converts Gregorian date to Persian(Jalali) date
     *
     * @param year
     *            <code>int</code>
     * @param month
     *            <code>int</code>
     * @param day
     *            <code>int</code>
     */
    public void GregorianToPersian(int year, int month, int day) {
        int jd = JG2JD(year, month, day, 0);
        JD2Jal(jd);
        this.year = jY;
        this.month = jM;
        this.day = jD;
    }
 
    /**
     * Converts Persian(Jalali) date to Gregorian date
     *
     * @param year
     *            <code>int</code>
     * @param month
     *            <code>int</code>
     * @param day
     *            <code>int</code>
     */
    public void PersianToGregorian(int year, int month, int day) {
        int jd = Jal2JD(year, month, day);
        JD2JG(jd, 0);
        this.year = gY;
        this.month = gM;
        this.day = gD;
    }
 
    /**
     * Get manipulated day
     *
     * @return Day as <code>int</code>
     */
    public int getDay() {
        return day;
    }
 
    /**
     * Get manipulated month
     *
     * @return Month as <code>int</code>
     */
    public int getMonth() {
        return month;
    }
 
    /**
     * Get manipulated year
     *
     * @return Year as <code>int</code>
     */
    public int getYear() {
        return year;
 
    }
}

نظرات

GR 10 سال پیش
کیه اینو بفهمه... یکی نیست واضح تر بگه ماهم بفهمیم

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .