آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

سینا  9 سال پیش  8 سال پیش
+28 0

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

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

// دریافت زمان کنونی سیستم
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
0 0
(9 سال پیش)
0 0
(9 سال پیش)
+1 0
با اضافه کردن switch-case ساده به کلاس تبدیل تاریخ می توان ماه ها را بر اساس اسم آن ها نیز دریافت کرد. (9 سال پیش)
0 0
من ازین کلاس برای تبدیل شمسی به میلادی استفاده کردم اما تاریخ امروز که 9 / 12 / 1394 هست رو 29 / 1 / 2016 تشخیص میده در حالی که باید 28 / 2 / 2016 تشخیص بده ، چطوریاس ؟ (8 سال پیش)
0 0
ماه رو به علاوه یک کردم مشکل حل شد.... (8 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Devtpoint  8 سال پیش
+6 0

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


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  8 سال پیش
+4 0

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

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;
 
    }
}

0 0
کیه اینو بفهمه... یکی نیست واضح تر بگه ماهم بفهمیم (8 سال پیش)

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