PDA

View Full Version : تبدیل تاریخ میلادی به شمسی



ghasem110deh
دوشنبه 01 خرداد 1396, 21:11 عصر
سلام به همه :-)
دوستان این کلاس رو ببینید :




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


public class PersianCalendar {


private String[] weekDayNames = {
"شنبه", "یکشنبه", "دوشنبه",
"سه شنبه", "چهارشنبه",
"پنج شنبه", "جمعه"
};
private String[] monthNames = {
"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور",
"مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"
};
public String strWeekDay = "";
public String strMonth = "";
public int day;
public int month;
public int year;
private int ld;
private Calendar calendar = Calendar.getInstance();
private int gregorianYear = calendar.get(Calendar.YEAR);
private int gregorianMonth = calendar.get(Calendar.MONTH) + 1;
private int gregorianDate = calendar.get(Calendar.DATE);
private int WeekDay = calendar.get(Calendar.DAY_OF_WEEK);


private int[] buf1 = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
private int[] buf2 = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};


public PersianCalendar() {
Date gregorianDate = new Date();
calendar.setTime(gregorianDate);
toPersian(gregorianDate);
}


public PersianCalendar(Date gregorianDate) {
calendar.setTime(gregorianDate);
toPersian(gregorianDate);
}


private void toPersian(Date gregorianDate) {
if ((gregorianYear % 4) != 0)
func1();
else
func2();
strMonth = monthNames[month - 1];
strWeekDay = weekDayNames[WeekDay];
}


private void func1() {
day = buf1[gregorianMonth - 1] + gregorianDate;
if (day > 79) {
day = day - 79;
if (day <= 186) {
int day2 = day;
month = (day2 / 31) + 1;
day = (day2 % 31);
if (day2 % 31 == 0) {
month--;
day = 31;
}
year = gregorianYear - 621;
} else {
int day2 = day - 186;
month = (day2 / 30) + 7;
day = (day2 % 30);
if (day2 % 30 == 0) {
month = (day2 / 30) + 6;
day = 30;
}
year = gregorianYear - 621;
}
} else {
ld = gregorianYear > 1996 && gregorianYear % 4 == 1 ? 11 : 10;
int day2 = day + ld;
month = (day2 / 30) + 10;
day = (day2 % 30);
if (day2 % 30 == 0) {
month--;
day = 30;
}
year = gregorianYear - 622;
}
}


private void func2() {
day = buf2[gregorianMonth - 1] + gregorianDate;
ld = gregorianYear >= 1996 ? 79 : 80;
if (day > ld) {
day = day - ld;
if (day <= 186) {
int day2 = day;
month = (day2 / 31) + 1;
day = (day2 % 31);
if (day2 % 31 == 0) {
month--;
day = 31;
}
year = gregorianYear - 621;
} else {
int day2 = day - 186;
month = (day2 / 30) + 7;
day = (day2 % 30);
if (day2 % 30 == 0) {
month--;
day = 30;
}
year = gregorianYear - 621;
}
} else {
int day2 = day + 10;
month = (day2 / 30) + 10;
day = (day2 % 30);
if (day2 % 30 == 0) {
month--;
day = 30;
}
year = gregorianYear - 622;
}
}
}


بدون مشکل کار میکنه ، بجز روزهای 30 و 31 آخر ماه که کلا کرش میکنه برنامه !
توی دیباگ هم هیچی نشون نمیده ! (یا من متوجه نشدم)

بهزاد اندیشمند
سه شنبه 02 خرداد 1396, 11:44 صبح
https://github.com/abbashosseini/Persian-Date-Android/raw/master/date.jpg

نمیدونم بدردتون میخوره یا نه اما میتونید از این کتابخانه برای گرفتن تاریخ فارسی استفاده کنید
https://github.com/abbashosseini/Persian-Date-Android