#!/usr/bin/python # task to convert a list of julian dates to gregorian dates # description at http://mathforum.org/library/drmath/view/51907.html # Original algorithm in Jean Meeus, "Astronomical Formulae for Calculators" import math, sys, string if len(sys.argv)==1: print "\n Task to convert a list of julian dates to gregorian dates." print " Written by Enno Middelberg 2002" print "\n Usage: jd2gd.py [-f] date1 date2 date3 ...\n" sys.exit() else: print "\n Task to convert a list of julian dates to gregorian dates." print " Written by Enno Middelberg 2002\n" for x in sys.argv[1:]: try: jd=float(x) except ValueError: continue jd=jd+0.5 Z=int(jd) F=jd-Z alpha=int((Z-1867216.25)/36524.25) A=Z + 1 + alpha - int(alpha/4) B = A + 1524 C = int( (B-122.1)/365.25) D = int( 365.25*C ) E = int( (B-D)/30.6001 ) dd = B - D - int(30.6001*E) + F if E<13.5: mm=E-1 if E>13.5: mm=E-13 if mm>2.5: yyyy=C-4716 if mm<2.5: yyyy=C-4715 months=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] daylist=[31,28,31,30,31,30,31,31,30,31,30,31] daylist2=[31,29,31,30,31,30,31,31,30,31,30,31] h=int((dd-int(dd))*24) min=int((((dd-int(dd))*24)-h)*60) sec=86400*(dd-int(dd))-h*3600-min*60 # Now calculate the fractional year. Do we have a leap year? if (yyyy%4 != 0): days=daylist2 elif (yyyy%400 == 0): days=daylist2 elif (yyyy%100 == 0): days=daylist else: days=daylist2 if "-f" in sys.argv: daysum=0 for y in range(mm-1): daysum=daysum+days[y] daysum=daysum+dd-1 if days[1]==29: fracyear=yyyy+daysum/366 else: fracyear=yyyy+daysum/365 print x+" = "+`fracyear` else: print x+" = "+months[mm-1]+" %i, %i, " % (dd, yyyy), print string.zfill(h,2)+":"+string.zfill(min,2)+":"+string.zfill(sec,2)+" UTC" print