  B4J Question how i use this java code in b4j ??

Discussion in 'B4J Questions' started by behnam_tr, Apr 16, 2019.

1. hey guys
i want to use this java code in b4j with javaobject lib
i need to help

Code:
#If JAVA

package converter;

public class converter {

/** Gregorian & Jalali (Hijri_Shamsi,Solar) Date Converter Functions
Author: JDF.SCR.IR =>> Download Full Version : http://jdf.scr.ir/jdf
License: GNU/LGPL _ Open Source & Free _ Version: 2.72 : [2017=1396]
--------------------------------------------------------------------
1461 = 365*4 + 4/4   &  146097 = 365*400 + 400/4 - 400/100 + 400/400
12053 = 365*33 + 32/4    &    36524 = 365*100 + 100/4 - 100/100   */

public static int[] gregorian_to_jalali(int gy, int gm, int gd){
int[] g_d_m = {0,31,59,90,120,151,181,212,243,273,304,334};
int jy;
if(gy>1600){
jy=979;
gy-=1600;
}else{
jy=0;
gy-=621;
}
int gy2 = (gm > 2)?(gy + 1):gy;
int days = (365 * gy) + ((int)((gy2 + 3) / 4)) - ((int)((gy2 + 99) / 100)) + ((int)((gy2 + 399) / 400)) - 80 + gd + g_d_m[gm - 1];
jy += 33 * ((int)(days / 12053));
days %= 12053;
jy += 4 * ((int)(days / 1461));
days %= 1461;
if(days > 365){
jy+=(int)((days-1)/365);
days=(days-1)%365;
}
int jm = (days < 186)?1 + (int)(days / 31):7 + (int)((days - 186) / 30);
int jd = 1 + ((days < 186)?(days % 31):((days - 186) % 30));
int[] out = {jy,jm,jd};
return out;
}

public static int[] jalali_to_gregorian(int jy, int jm, int jd){
int gy;
if(jy>979){
gy=1600;
jy-=979;
}else{
gy=621;
}
int days = (365 * jy) + (((int)(jy / 33)) * 8) + ((int)(((jy % 33) + 3) / 4)) + 78 + jd + ((jm < 7)?(jm - 1) * 31:((jm - 7) * 30) + 186);
gy += 400 * ((int)(days / 146097));
days %= 146097;
if(days > 36524){
gy += 100 * ((int)(--days / 36524));
days %= 36524;
if (days >= 365)days++;
}
gy += 4 * ((int)(days / 1461));
days %= 1461;
if(days > 365){
gy += (int)((days - 1) / 365);
days = (days - 1) % 365;
}
int gd = days + 1;
int[] sal_a = {0,31,((gy % 4 == 0 && gy % 100 != 0) || (gy % 400 == 0))?29:28,31,30,31,30,31,31,30,31,30,31};
int gm;
for(gm = 0;gm < 13;gm++){
int v = sal_a[gm];
if(gd <= v)break;
gd -= v;
}
int[] out = {gy,gm,gd};
return out;
}

}

#End If

i write this code but i'm getting error

Code:
Private NativeMe As JavaObject
NativeMe = Me
log(NativeMe.RunMethod("gregorian_to_jalali"array(2019,4,16)))

2. Why don't you just rewrite this in pure B4J? Doesn't seem to difficult, it is just some math.

KMatle and behnam_tr like this.
3. problem solved with this code

Code:
NativeMe = Me

Dim r() As Int=NativeMe.RunMethod("gregorian_to_jalali"Array(2019,4,16))

Log(r(0)&r(1)&r(2))

thanks

alwaysbusy likes this.