<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: Farsi code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 21 Aug 2008 08:42:56 GMT</pubDate>
    <description>DZone Snippets: Farsi code</description>
    <item>
      <title>Convert Jalali to Gregorian Date &amp; vice versa</title>
      <link>http://snippets.dzone.com/posts/show/4003</link>
      <description>&lt;code&gt;&lt;br /&gt;#Jalali Date function by Ali Khalili (ali1k AT yahoo DOT com)&lt;br /&gt;#convert Gregorian to Jalali&lt;br /&gt;def gregorianToJalali(year,month,day)&lt;br /&gt;  gDaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]&lt;br /&gt;  jDaysInMonth=[31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]&lt;br /&gt;  gy=(year.to_i)-1600&lt;br /&gt;  gm=(month.to_i)-1&lt;br /&gt;  gd=(day.to_i)-1&lt;br /&gt;  jm=0&lt;br /&gt;  jd=0&lt;br /&gt;  jy=0&lt;br /&gt;  gDayNo=365*gy + (gy+3)/4 - (gy+99)/100 +(gy+399)/400&lt;br /&gt;  i=0&lt;br /&gt;  0.upto(gm-1) do |i|&lt;br /&gt;    gDayNo += gDaysInMonth[i]&lt;br /&gt;  end&lt;br /&gt;  if (gm&gt;1 &amp;&amp; (gy%4==0 &amp;&amp; gy%100!=0) || (gy%400==0))&lt;br /&gt;    #leap and after Feb&lt;br /&gt;    gDayNo=gDayNo+1&lt;br /&gt;  end&lt;br /&gt;  gDayNo +=gd&lt;br /&gt;  jDayNo= gDayNo-79&lt;br /&gt;  #12053=365*33 + 32/4&lt;br /&gt;  jNp=jDayNo/12053&lt;br /&gt;  jDayNo=jDayNo % 12053&lt;br /&gt;  #1461=365*4 +4/4&lt;br /&gt;  jy=979 + 33*jNp + 4*(jDayNo/1461)&lt;br /&gt;  jDayNo %=1461&lt;br /&gt;  if(jDayNo &gt;= 366)&lt;br /&gt;  jy +=(jDayNo-1)/365&lt;br /&gt;  jDayNo =(jDayNo-1)%365&lt;br /&gt;  end&lt;br /&gt;  i=0&lt;br /&gt;  while (i&lt;11 &amp;&amp; jDayNo&gt;=jDaysInMonth[i])&lt;br /&gt;    jDayNo -= jDaysInMonth[i]&lt;br /&gt;    i=i+1&lt;br /&gt;  end&lt;br /&gt;   jm=i+1&lt;br /&gt;  jd=jDayNo+1&lt;br /&gt;  puts " #{jy} - #{jm} - #{jd}"&lt;br /&gt;end&lt;br /&gt;#Convert Jalali to Gregorian&lt;br /&gt;def jalaliToGregorian(year,month,day)&lt;br /&gt;  gDaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]&lt;br /&gt;  jDaysInMonth=[31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]&lt;br /&gt;  jy=(year.to_i)-979&lt;br /&gt;  jm=(month.to_i)-1&lt;br /&gt;  jd=(day.to_i)-1&lt;br /&gt;  gm=0&lt;br /&gt;  gd=0&lt;br /&gt;  gy=0&lt;br /&gt;  jDayNo=365*jy + (jy/33)*8 + ((jy%33)+3)/4&lt;br /&gt;  0.upto(jm-1)do |i|&lt;br /&gt;  jDayNo +=jDaysInMonth[i]&lt;br /&gt;end&lt;br /&gt;jDayNo +=jd&lt;br /&gt;gDayNo=jDayNo + 79&lt;br /&gt;#146097=365*400 +400/4 - 400/100 +400/400&lt;br /&gt;gy=1600+400*(gDayNo/146097)&lt;br /&gt;gDayNo = gDayNo%146097&lt;br /&gt;leap=true&lt;br /&gt;if(gDayNo &gt;= 36525)&lt;br /&gt;gDayNo =gDayNo-1&lt;br /&gt;#36524 = 365*100 + 100/4 - 100/100&lt;br /&gt;gy +=100* (gDayNo/36524)&lt;br /&gt;gDayNo=gDayNo % 36524&lt;br /&gt;if(gDayNo&gt;=365)&lt;br /&gt;gDayNo =gDayNo+1&lt;br /&gt;else&lt;br /&gt;leap=false&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;#1461 = 365*4 + 4/4&lt;br /&gt;gy += 4*(gDayNo/1461)&lt;br /&gt;gDayNo %=1461&lt;br /&gt;if(gDayNo&gt;=366)&lt;br /&gt;leap=false&lt;br /&gt;gDayNo=gDayNo-1&lt;br /&gt;gy +=gDayNo/365&lt;br /&gt;gDayNo=gDayNo %365&lt;br /&gt;end&lt;br /&gt;  i=0&lt;br /&gt;  tmp=0&lt;br /&gt;  while (gDayNo&gt;= (gDaysInMonth[i]+tmp))&lt;br /&gt;    if(i==1 &amp;&amp; leap==true)&lt;br /&gt;    tmp=1&lt;br /&gt;    else&lt;br /&gt;    tmp=0&lt;br /&gt;    end&lt;br /&gt;    gDayNo -=gDaysInMonth[i]+tmp&lt;br /&gt;    i=i+1&lt;br /&gt;  end&lt;br /&gt;  gm=i+1&lt;br /&gt;  gd=gDayNo+1&lt;br /&gt;  puts " #{gy} - #{gm} - #{gd}"&lt;br /&gt;end&lt;br /&gt;#Run Program&lt;br /&gt;#gregorianToJalali(*ARGV)&lt;br /&gt;jalaliToGregorian(*ARGV)&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 13 May 2007 15:01:56 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4003</guid>
      <author>ali1k (Ali Khalili)</author>
    </item>
  </channel>
</rss>
