09357900665 Basic4x@gmail.com تایم کاری : شنبه تا پنج شنبه تهران ، ولیعصر

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

سلام دوستان در این سری از آموزش های برنامه نویسی اندروید به آموزش تاریخ شمسی در برنامه نویسی اندروید می پردازیم در ادامه یک کلاس برای به دست آوردن تاریح شمسی (تاریخ فارسی یا ایرانی) معرفی می کنیم که به سادگی می توانید تاریخ روز را به فارسی یا شمسی به دست آورد در ادامه با ما همراه باشید.

 

کلاس شمسی زیر را که در ادامه معرفی می کنیم از سال ۱۹۹۰ به بعد قابل استفاده است یعنی از ۱۳۶۹ به بعد قابل استفاده است.

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

یک کلاس به نام Utility.java ایجاد کرده و کدهای زیر را در آن قرار دهید.

package com.samsung.nfctag.Util;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * Created by JFP on 11/22/2017.
 */

public class Utility {

    public String strWeekDay = "";
    public String strMonth = "";

    public String nowDate() {

        Calendar calendar = Calendar.getInstance();
        return calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" 
       + calendar.get(Calendar.DAY_OF_MONTH) + " "
       + calendar.getTime().getHours() + ":" + calendar.getTime().getMinutes() + ":" 
       + calendar.getTime().getSeconds();
    }

    public String nowdate() {
        Calendar calendar = Calendar.getInstance();
        return calendar.get(Calendar.YEAR) + "/" + (calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DAY_OF_MONTH);

    }


    private class SolarCalendar {


        int date;
        int month;
        int year;

        public SolarCalendar() {
            Date MiladiDate = new Date();
            calcSolarCalendar(MiladiDate);
        }

        public SolarCalendar(Date MiladiDate) {
            calcSolarCalendar(MiladiDate);
        }

        private void calcSolarCalendar(Date MiladiDate) {

            int ld;

            int miladiYear = MiladiDate.getYear() + 1900;
            int miladiMonth = MiladiDate.getMonth() + 1;
            int miladiDate = MiladiDate.getDate();
            int WeekDay = MiladiDate.getDay();

            int[] buf1 = new int[12];
            int[] buf2 = new int[12];

            buf1[0] = 0;
            buf1[1] = 31;
            buf1[2] = 59;
            buf1[3] = 90;
            buf1[4] = 120;
            buf1[5] = 151;
            buf1[6] = 181;
            buf1[7] = 212;
            buf1[8] = 243;
            buf1[9] = 273;
            buf1[10] = 304;
            buf1[11] = 334;

            buf2[0] = 0;
            buf2[1] = 31;
            buf2[2] = 60;
            buf2[3] = 91;
            buf2[4] = 121;
            buf2[5] = 152;
            buf2[6] = 182;
            buf2[7] = 213;
            buf2[8] = 244;
            buf2[9] = 274;
            buf2[10] = 305;
            buf2[11] = 335;

            if ((miladiYear % 4) != 0) {
                date = buf1[miladiMonth - 1] + miladiDate;

                if (date > 79) {
                    date = date - 79;
                    if (date <= 186) {
                        switch (date % 31) {
                            case 0:
                                month = date / 31;
                                date = 31;
                                break;
                            default:
                                month = (date / 31) + 1;
                                date = (date % 31);
                                break;
                        }
                        year = miladiYear - 621;
                    } else {
                        date = date - 186;

                        switch (date % 30) {
                            case 0:
                                month = (date / 30) + 6;
                                date = 30;
                                break;
                            default:
                                month = (date / 30) + 7;
                                date = (date % 30);
                                break;
                        }
                        year = miladiYear - 621;
                    }
                } else {
                    if ((miladiYear > 1996) && (miladiYear % 4) == 1) {
                        ld = 11;
                    } else {
                        ld = 10;
                    }
                    date = date + ld;

                    switch (date % 30) {
                        case 0:
                            month = (date / 30) + 9;
                            date = 30;
                            break;
                        default:
                            month = (date / 30) + 10;
                            date = (date % 30);
                            break;
                    }
                    year = miladiYear - 622;
                }
            } else {
                date = buf2[miladiMonth - 1] + miladiDate;

                if (miladiYear >= 1996) {
                    ld = 79;
                } else {
                    ld = 80;
                }
                if (date > ld) {
                    date = date - ld;

                    if (date <= 186) {
                        switch (date % 31) {
                            case 0:
                                month = (date / 31);
                                date = 31;
                                break;
                            default:
                                month = (date / 31) + 1;
                                date = (date % 31);
                                break;
                        }
                        year = miladiYear - 621;
                    } else {
                        date = date - 186;

                        switch (date % 30) {
                            case 0:
                                month = (date / 30) + 6;
                                date = 30;
                                break;
                            default:
                                month = (date / 30) + 7;
                                date = (date % 30);
                                break;
                        }
                        year = miladiYear - 621;
                    }
                } else {
                    date = date + 10;

                    switch (date % 30) {
                        case 0:
                            month = (date / 30) + 9;
                            date = 30;
                            break;
                        default:
                            month = (date / 30) + 10;
                            date = (date % 30);
                            break;
                    }
                    year = miladiYear - 622;
                }

            }

            switch (month) {
                case 1:
                    strMonth = "فروردين";
                    break;
                case 2:
                    strMonth = "ارديبهشت";
                    break;
                case 3:
                    strMonth = "خرداد";
                    break;
                case 4:
                    strMonth = "تير";
                    break;
                case 5:
                    strMonth = "مرداد";
                    break;
                case 6:
                    strMonth = "شهريور";
                    break;
                case 7:
                    strMonth = "مهر";
                    break;
                case 8:
                    strMonth = "آبان";
                    break;
                case 9:
                    strMonth = "آذر";
                    break;
                case 10:
                    strMonth = "دي";
                    break;
                case 11:
                    strMonth = "بهمن";
                    break;
                case 12:
                    strMonth = "اسفند";
                    break;
            }

            switch (WeekDay) {

                case 0:
                    strWeekDay = "يکشنبه";
                    break;
                case 1:
                    strWeekDay = "دوشنبه";
                    break;
                case 2:
                    strWeekDay = "سه شنبه";
                    break;
                case 3:
                    strWeekDay = "چهارشنبه";
                    break;
                case 4:
                    strWeekDay = "پنج شنبه";
                    break;
                case 5:
                    strWeekDay = "جمعه";
                    break;
                case 6:
                    strWeekDay = "شنبه";
                    break;
            }

        }

    }

    public static String getCurrentShamsidate() {
        Locale loc = new Locale("en_US");
        Utility util = new Utility();
        SolarCalendar sc = util.new SolarCalendar();
        return String.valueOf(sc.year) + "/" + String.format(loc, "%02d",
                sc.month) + "/" + String.format(loc, "%02d", sc.date);
    }

    public String day_of_week() {
        Date MiladiDate = new Date();
        MiladiDate.setDate(6);
        MiladiDate.setMonth(12);
        MiladiDate.setYear(1396);
        SolarCalendar solarCalendar = new SolarCalendar();

        solarCalendar.calcSolarCalendar(MiladiDate);
        return strWeekDay;
    }

    public String day_of_week(int year, int month, int day) {
        Calendar now = Calendar.getInstance();
        now.set(year, month, day);

        String[] strDays = new String[]{"یکشنبه", "دوشنبه", "سشنبه", "چهارشنبه", "پنجشنبه",
                "جمعه", "شنبه"};

        return strDays[now.get(Calendar.DAY_OF_WEEK)];
    }
}

 

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

 

getCurrentShamsidate()

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

حال برای استفاده از متد بالا ابتدا باید کلاس کمکی Utility.java را یک instance ازش بگیرید سپس به متد getCurrentShamsidate دسترسی خواهید داشت.

مثل زیر عمل کنید.

Utility util = new Utility();
String ywd = util.getCurrentShamsidate();
Date date = new Date();
        date.setDate();
        date.setMonth();
        date.setYear();     
 
 new SolarCalendar().calcSolarCalendar(date);

متد های دیگری هم در کلاس بالا وجود دارد که باز از مهمتریناش متد day_of_week است که با دادن سال و ماه و روز به شما اعلام می کند که امروز چه روزی از هفته است مثلا شنبه , یکشنه و الی آخر .

حال اگر بخواهید یک روز خاص یا ماه خاص یا سال خاص رو به دست بیارید باید از تابع date آن روز سال و ماه رو به میلادی به تابع بدهید سپس آن برای شما محاسبه خواهد کرد.

 

مجتبی حسین زاده

65 مطلب منتشر شده

مجتبی حسین زاده سلام خدمت شما، مجتبی هستم مدیر و موسس اندروید راست چین، بیش از 15 سال تو حوزه برنامه نویسی اندروید و وب هستم و در کنار وبلاگ نویسی و طراحی سایت و همچنین برنامه نویسی اندروید در زمینه شبکه و دوربین های مداربسته نیز فعالیت دارم. خوشحال میشم اگه سوالی داشته باشید با بنده مطرح کنید.

درباره این مطلب نظر دهید !