### kal_zoro ### 6.2.2007 ### Maple procedures for the Zoroastrian and Mandean calendars. ### (c) Svante Janson 2007 ### May be freely used and modified for non-commercial properties. ### These procedures are drafts only and not in a final, polished ### version (and probably never will be). ### There is no guarantee that they are correct. ### There is, unfortunately, no further documentation. if # true or (not (Qkal_zoro_LOADED=true)) then Qkal_zoro_LOADED:=true; # NB final fi last in the file # To avoid unnecessary repeated loadings of the file, # the line "true or" should be commented away with "#" # While working on the file, remove this "#" ZoroQ_epok := 1952063; # RD 230638, 16.6 632 ZoroS_epok := 1952093; # RD 230668, 16.7 632 Mande_epok := 1952063; # RD 230638, 16.6 632 (=ZoroQ_epok) ZoroQ4JD:=proc(jd) local x,y,m,d,md; x:=jd-ZoroQ_epok+1; y:=ceil(x/365); md:=amod(x,365); m:=ceil(md/30); d:=amod(md,30); if m=13 then m:=0; fi; [d,m,y]; end; JD4ZoroQ:=proc(d,m,y) local dx; if m=0 then dx:=12*30 else dx:=(m-1)*30 fi; ZoroQ_epok+365*(y-1)+dx+(d-1); end; ZoroQ4RD:=rd->ZoroQ4JD(JD4RD(rd)); ZoroQ4Jul:=(d,m,y)->ZoroQ4JD(JD4Jul(d,m,y)); ZoroQ4Greg:=(d,m,y)->ZoroQ4JD(JD4Greg(d,m,y)); RD4ZoroQ:=(d,m,y)->RD4JD(JD4ZoroQ(d,m,y)); Jul4ZoroQ:=(d,m,y)->Jul4JD(JD4ZoroQ(d,m,y)); Greg4ZoroQ:=(d,m,y)->Greg4JD(JD4ZoroQ(d,m,y)); ZoroS4JD:=proc(jd) local x,y,m,d,md; x:=jd-ZoroS_epok+1; y:=ceil(x/365); md:=amod(x,365); m:=ceil(md/30); d:=amod(md,30); if m=13 then m:=0; fi; [d,m,y]; end; JD4ZoroS:=proc(d,m,y) local dx; if m=0 then dx:=12*30 else dx:=(m-1)*30 fi; ZoroS_epok+365*(y-1)+dx+(d-1); end; ZoroS4RD:=rd->ZoroS4JD(JD4RD(rd)); ZoroS4Jul:=(d,m,y)->ZoroS4JD(JD4Jul(d,m,y)); ZoroS4Greg:=(d,m,y)->ZoroS4JD(JD4Greg(d,m,y)); RD4ZoroS:=(d,m,y)->RD4JD(JD4ZoroS(d,m,y)); Jul4ZoroS:=(d,m,y)->Jul4JD(JD4ZoroS(d,m,y)); Greg4ZoroS:=(d,m,y)->Greg4JD(JD4ZoroS(d,m,y)); ### Mande4JD:=proc(jd) local x,y,m,d,md; x:=jd-Mande_epok+1; y:=ceil(x/365); md:=amod(x,365); if md<=8*30 then m:=ceil(md/30); d:=amod(md,30); elif md<=8*30+5 then m:=0; d:=md-8*30; else m:=ceil((md-5)/30); d:=amod(md-5,30); fi; [d,m,y]; end; JD4Mande:=proc(d,m,y) local dx; if m=0 then dx:=8*30 else dx:=(m-1)*30+ifx(m>8,5) fi; Mande_epok+365*(y-1)+dx+(d-1); end; Mande4RD:=rd->Mande4JD(JD4RD(rd)); Mande4Jul:=(d,m,y)->Mande4JD(JD4Jul(d,m,y)); Mande4Greg:=(d,m,y)->Mande4JD(JD4Greg(d,m,y)); RD4Mande:=(d,m,y)->RD4JD(JD4Mande(d,m,y)); Jul4Mande:=(d,m,y)->Jul4JD(JD4Mande(d,m,y)); Greg4Mande:=(d,m,y)->Greg4JD(JD4Mande(d,m,y)); fi;