def gregorianToJalali(year,month,day)
gDaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
jDaysInMonth=[31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
gy=(year.to_i)-1600
gm=(month.to_i)-1
gd=(day.to_i)-1
jm=0
jd=0
jy=0
gDayNo=365*gy + (gy+3)/4 - (gy+99)/100 +(gy+399)/400
i=0
0.upto(gm-1) do |i|
gDayNo += gDaysInMonth[i]
end
if (gm>1 && (gy%4==0 && gy%100!=0) || (gy%400==0))
gDayNo=gDayNo+1
end
gDayNo +=gd
jDayNo= gDayNo-79
jNp=jDayNo/12053
jDayNo=jDayNo % 12053
jy=979 + 33*jNp + 4*(jDayNo/1461)
jDayNo %=1461
if(jDayNo >= 366)
jy +=(jDayNo-1)/365
jDayNo =(jDayNo-1)%365
end
i=0
while (i<11 && jDayNo>=jDaysInMonth[i])
jDayNo -= jDaysInMonth[i]
i=i+1
end
jm=i+1
jd=jDayNo+1
puts " #{jy} - #{jm} - #{jd}"
end
def jalaliToGregorian(year,month,day)
gDaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
jDaysInMonth=[31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
jy=(year.to_i)-979
jm=(month.to_i)-1
jd=(day.to_i)-1
gm=0
gd=0
gy=0
jDayNo=365*jy + (jy/33)*8 + ((jy%33)+3)/4
0.upto(jm-1)do |i|
jDayNo +=jDaysInMonth[i]
end
jDayNo +=jd
gDayNo=jDayNo + 79
gy=1600+400*(gDayNo/146097)
gDayNo = gDayNo%146097
leap=true
if(gDayNo >= 36525)
gDayNo =gDayNo-1
gy +=100* (gDayNo/36524)
gDayNo=gDayNo % 36524
if(gDayNo>=365)
gDayNo =gDayNo+1
else
leap=false
end
end
gy += 4*(gDayNo/1461)
gDayNo %=1461
if(gDayNo>=366)
leap=false
gDayNo=gDayNo-1
gy +=gDayNo/365
gDayNo=gDayNo %365
end
i=0
tmp=0
while (gDayNo>= (gDaysInMonth[i]+tmp))
if(i==1 && leap==true)
tmp=1
else
tmp=0
end
gDayNo -=gDaysInMonth[i]+tmp
i=i+1
end
gm=i+1
gd=gDayNo+1
puts " #{gy} - #{gm} - #{gd}"
end
jalaliToGregorian(*ARGV)