Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS 

Convert Jalali to Gregorian Date & vice versa

#Jalali Date function by Ali Khalili (ali1k AT yahoo DOT com)
#convert Gregorian to Jalali
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))
    #leap and after Feb
    gDayNo=gDayNo+1
  end
  gDayNo +=gd
  jDayNo= gDayNo-79
  #12053=365*33 + 32/4
  jNp=jDayNo/12053
  jDayNo=jDayNo % 12053
  #1461=365*4 +4/4
  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
#Convert Jalali to Gregorian
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
#146097=365*400 +400/4 - 400/100 +400/400
gy=1600+400*(gDayNo/146097)
gDayNo = gDayNo%146097
leap=true
if(gDayNo >= 36525)
gDayNo =gDayNo-1
#36524 = 365*100 + 100/4 - 100/100
gy +=100* (gDayNo/36524)
gDayNo=gDayNo % 36524
if(gDayNo>=365)
gDayNo =gDayNo+1
else
leap=false
end
end
#1461 = 365*4 + 4/4
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
#Run Program
#gregorianToJalali(*ARGV)
jalaliToGregorian(*ARGV)
« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS