هل يمكن اجراء تعديل على هذا الكود ليرجع بنتائج صحيحه.
الغرض من الكلاس هو تحويل التاريخ الهجري الى ميلادي و العكس متبعا القوانين الرياضية الموجود في الملف المرفق.
class Converter{
private String hijri, milad;
private int dH, mH, yH,dM, mM, yM;
public Converter(){
}
public void converterToHijri(int y, int m, int d){
dM=d;
mM=m;
yM=y;
yolyaniToHijri(miladToYolyani(y,m,d));
}
public void converterToMilad(int y, int m, int d){
dH=d;
mH=m;
yH=y;
yolyaniToMilad(hijriToYolyani(y,m,d));
}
private void yolyaniToHijri(int jd){
int l,n,j,m,d,y;
l = (jd) - 1948439 + 10632;
n = ((l - 1) / 10631);
l = l - 10631 * n + 354;
j = ((10985 - l) / 5316) * ((50 * l) / 17719) + (l / 5670) * ((43 * l) / 15238);
l = l - ((30 - j) / 15) * ((17719 * j) / 50) - (j / 16) * ((15238 * j) / 43) + 29;
m = ((24 * l) / 709);
d = l - ((709 * m) / 24);
y = (30 * n + j - 30);
dH=d;
mH=m;
yH=y;
}
private void yolyaniToMilad(int jd){
int l,n,i,j,d,m,y;
l = jd + 68569;
n = (4 * l) / 146097;
l = l - (146097 * n + 3) / 4;
i = (4000 * (l+1)) / 1461001;
l = l - (1461 * i) / 4 + 31;
j = (80 * l) / 2447;
d = l - (2447 * j) / 80;
l = j / 11;
m = j + 2 - 12 * l;
y = 100 * (n - 49) + i + l;
dM=d;
mM=m;
yM=y;
}
private int hijriToYolyani(int y, int m, int d){
return ((int)((11*y+3)/30)) + ((int)(354*y)) + ((int)(30*m))
- ((int)((m-1)/2)) + d + 1948439 - 385;
}
private int miladToYolyani(int y, int m, int d){
int b=0;
if(m<=2){
y--;
m+=12;
}
if(y<1582 && m<10 && d<15){
int a = (int)(y/100);
b = 2 - a + ((int)(a/4));
}
return (int)(((int)(365.25*(y+4716))) + ((int)(30.6001*(m+1))) + d + b - 1524.5);
}
public String getHijri(){
return String.format("%d-%d-%d",yH,mH,dH);
}
public String getMilad(){
return String.format("%d-%d-%d",yM,mM,dM);
}
public String toString(){
return String.format("H:%s : M:%s", getHijri(), getMilad());
}
}
class Test{
public static void main(String[]args){
Converter c=new Converter();
c.converterToMilad(1427,9,12);
System.out.println(c.toString());
c.converterToHijri(2006,10,4);
System.out.println(c.toString());
}
}