[Coco] Julian Date

phillip taylor ptaylor2446 at gmail.com
Thu May 25 22:14:21 EDT 2017


Wayne

The code looks good and I will will include it with Os9Budget.

On Thu, May 25, 2017 at 4:27 PM, Wayne Campbell <asa.rand at gmail.com> wrote:

> Here is the corrected JD procedure. There are differences from the one
> i posted yesterday, so delete that one and replace it with this one.
>
> Wayne
>
> PROCEDURE JD
>
> (* Parameter statements *)
> (* ==================== *)
>
> PARAM todaysDate:STRING[10] \(* .......... Pass todays date in form of
> mm/dd/yyyy
>
> (* Constant Dimension statements *)
> (* ============================= *)
>
> DIM _cls:BYTE \(* ........................ clear screen value
> DIM _Jan1900:REAL \(* .................... Julian day number for 1/1/1900
>
> (* Variable Dimension statements *)
> (* ============================= *)
>
> DIM currentDate:STRING[10] \(* ........... internal variable to hold
> contents of the todaysDate parameter
> DIM weekdayNumberG,weekdayNumberJ:BYTE \(* weekdayNumber = 1-7
> DIM weekdayName(7):STRING[9] \(* ......... array of weekday names
> DIM month,day,year:INTEGER \(* ........... month = 1-12, day = 1-31, year =
> any valid positive INTEGER > 0
> DIM julianDayJ,julianDayG:REAL \(* ....... JDN for Julian date, JDN for
> Gregorian date
> DIM A,B,C,E,F:REAL \(* ................... used to calculate julianDay
> DIM leapYear,Gregorian:BOOLEAN \(* ....... leapYear TRUE = leap year, FALSE
> = not leap year,
> (* ....................................... Gregorian TRUE = Gregorian
> date,
> FALSE = Julian date
>
> (* Initial Assignment statements *)
> (* ============================= *)
>
> (* ====================================================== *)
> (* I calculated the JDN for Jan. 1, 1900 on the Gregorian *)
> (* calendar and created the "constant" _Jan1900 to hold   *)
> (* this value, then I subtract it from the JDN for the    *)
> (* current date to get how many days have elapsed since   *)
> (* January 1, 1900. (Julian calendar = 2415032.5)         *)
> (* ====================================================== *)
>
> _Jan1900:=2415020.5
> _cls:=12
> currentDate:=todaysDate
> weekdayNumberG:=1
> weekdayNumberJ:=1
> weekdayName(1):="Monday"
> weekdayName(2):="Tuesday"
> weekdayName(3):="Wednesday"
> weekdayName(4):="Thursday"
> weekdayName(5):="Friday"
> weekdayName(6):="Saturday"
> weekdayName(7):="Sunday"
> month:=VAL(MID$(currentDate,1,2))
> day:=VAL(MID$(currentDate,4,2))
> year:=VAL(MID$(currentDate,7,4))
> leapYear:=FALSE
>
> (* Beginning of Program *)
> (* ==================== *)
>
> (* Set the leap year flag *)
> (* ====================== *)
>
> IF MOD(FLOAT(year),4)=0 THEN
> IF MOD(FLOAT(year),100)<>0 OR MOD(FLOAT(year),100)=0 AND
> MOD(FLOAT(year),400)=0 THEN
> leapYear:=TRUE
> ELSE
> leapYear:=FALSE
> ENDIF
> ENDIF
>
> (* ====================================================== *)
> (* Everything in this section and in subroutine 10 is     *)
> (* based on what I found online at:                       *)
> (* quasar.as.utexas.edu/BillInfo/JulianDatesG.html        *)
> (* It calculates the Julian Day Number (JDN) back to      *)
> (* January 1, 4713 BC. I had to reorder the weekday       *)
> (* names to Monday through Sunday and add 1 to the        *)
> (* result of the MOD because the weekday name was off     *)
> (* by one. I found the calculator at:                     *)
> (* quasar.as.utexas.edu/BillInfo/JulianDateCalc.html      *)
> (* that uses the algorithm I have here. It was useful     *)
> (* in helping to determine how to correctly calculate     *)
> (* the JDN for both Julian and Gregorian calendar dates.  *)
> (* ====================================================== *)
>
> IF month=1 OR month=2 THEN
> year:=year-1
> month:=month+12
> ENDIF
>
> Gregorian:=TRUE
> GOSUB 10 \(* ............................. get JDN for Gregorian calendar
> Gregorian:=FALSE
> GOSUB 10 \(* ............................. get JDN for Julian calendar
>
> (* ====================================================== *)
>
> (* Determine weekday name *)
> (* ====================== *)
>
> weekdayNumberG:=MOD(julianDayG,7)+1
> IF weekdayNumberG=0 THEN
> weekdayNumberG:=1
> ENDIF
> weekdayNumberJ:=MOD(julianDayJ,7)+1
> IF weekdayNumberJ=0 THEN
> weekdayNumberj:=1
> ENDIF
>
> (* Print results *)
> (* ============= *)
>
> PUT #1,_cls
>
> PRINT "The JDN (Julian Day Number) (and possibly the weekday name) is
> different when"
> PRINT "calculating from a Gregorian calendar date than when calculating
> from a Julian"
> PRINT "calendar date."
> PRINT "(Julian) means Julian calendar date, and"
> PRINT "(Gregorian) means Gregorian calendar date."
>
> PRINT
> PRINT "The date you specified is: "; currentDate
> PRINT "and is a "; weekdayName(weekdayNumberG); " (Gregorian, ";
> weekdayName(weekdayNumberJ); " Julian)"
> PRINT "and is ";
>
> IF year>1900 OR year=1900 AND (month>1 OR day>1) THEN
> PRINT julianDayG-_Jan1900; " days since January 1, 1900"
> PRINT "and is ";
> ENDIF
>
> PRINT julianDayJ; " (Julian), "; julianDayG; " (Gregorian), days since
> January 1, 4713 BC"
> PRINT
>
> IF leapYear THEN
> PRINT "It is a leap year"
> ELSE
> PRINT "It is not a leap year"
> ENDIF
>
> END
>
> (* Julian Day Number calculator *)
> (* ============================ *)
>
> 10 IF Gregorian THEN
> A:=INT(FLOAT(year)/100)
> B:=INT(FLOAT(A)/4)
> C:=2-A+B
> ELSE
> C:=0
> ENDIF
> E:=INT(365.25*(year+4716))
> F:=INT(30.6001*(month+1))
>
> IF Gregorian THEN
> julianDayG:=C+day+E+F-1524.5
> ELSE
> julianDayJ:=C+day+E+F-1524.5
> ENDIF
> RETURN
>
>
> On Wed, May 24, 2017 at 7:39 PM, Walter Zambotti <zambotti at iinet.net.au>
> wrote:
>
> >
> >
> > >Oh, and if someone feels up to it they can try removing the float()s
> from
> > the MOD and INT >statements and see if it runs correctly in the 6809
> > version. I'm fairly certain it will, but it would be >nice to know. I
> don't
> > have a 6809 version of NOS9 or Basic09 to test with.
> >
> > You don't need a 6809 or the 6809 version of Nitros09.
> >
> > You just need the 6809 version of Basic09
> >
> > How I tested:
> >
> > VCC 6309 + NOS09 Lvl2 6309  + Basic09_6309 (MOD didn't work)
> > and
> > VCC 6309 + NOS09 Lvl2 6309  + Basic09_6809 (MOD did work)
> >
> > In other words the 6809 version of Basic09 will run in the 6309
> > environment.
> >
> > You can tell which version of basic09 you have by reading the opening
> > banner when you start it.  It explicitly states the version.
> >
> > Walter
> >
> > -----Original Message-----
> > From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of Wayne
> > Campbell
> > Sent: Thursday, 25 May 2017 10:31 AM
> > To: CoCoList <coco at maltedmedia.com>
> > Subject: Re: [Coco] Julian Date
> >
> > Oh, and if someone feels up to it they can try removing the float()s from
> > the MOD and INT statements and see if it runs correctly in the 6809
> > version. I'm fairly certain it will, but it would be nice to know. I
> don't
> > have a 6809 version of NOS9 or Basic09 to test with.
> >
> >
> > On May 24, 2017 7:26 PM, "Wayne Campbell" <asa.rand at gmail.com> wrote:
> >
> > > The problem has been solved, and there are at least two broken
> > > functions in B09. The integer versions of INT and MOD do not return
> > > the correct results. I forced the use of the real (float) versions and
> > > the results are now correct.
> > >
> > > I also had to make a correction to the weekday name code. With the
> > > weekday names ordered from Monday through Sunday, the weekday name
> > > chosen was one off (Monday instead of Tuesday for example). Adding 1
> > > to the calculation corrected that. I could have ordered the array from
> > > Tuesday through Monday, but I decided adding 1 was easier.
> > >
> > > I will upload the corrected code tomorrow if I can, otherwise as soon
> > > as possible.
> > >
> > >
> > > On May 24, 2017 3:33 PM, "Christopher R. Hawks" <chawks at dls.net>
> wrote:
> > >
> > >> On Wed, 24 May 2017 14:28:04 -0700
> > >> Wayne Campbell <asa.rand at gmail.com> wrote:
> > >>
> > >> > The functions provided by Luis are not Basic09. B09 does not
> > >> > support function structures like this, and MOD in B09 is a ML
> > >> > function whose syntax is MOD(arg1,arg2), not arg1 MOD arg2.
> > >> >
> > >> >
> > >>
> > >>   And while you _can_ set the values of parameters passed in (dd =
> > >> dias, mm = FIX(dd / 61) * 2 + 1, etc) NOT recommended I'm pretty sure
> > >> you can't set the function name to something (FechaJulDMA = dias)
> > >>
> > >> > On May 24, 2017 2:22 PM, "Gregory Law" <glaw at live.com> wrote:
> > >> >
> > >> > This is Basic09 on OS-9/NitrOS-9.
> > >> >
> > >> > On 5/24/2017 5:18:54 PM, "Wayne Campbell" <asa.rand at gmail.com>
> wrote:
> > >> >
> > >> > >I find these two functions interesting. What language is it?
> > >> > >
> > >> > >It looks like BASIC, but I've never seen a function in basic
> > >> > >written this way before.
> > >> > >
> > >> > >
> > >> > >On May 23, 2017 7:37 PM, "Luis Fernández" <luis46coco at hotmail.com>
> > >> > >wrote:
> > >> > >
> > >> > >>  OR
> > >> > >>
> > >> > >>
> > >> > >>  FUNCTION FechaJulDMA (tjul, dd, mm, aa)  T = tjul + 62
> > >> > >>  t2 = FIX(T / 1461) * 4 + 1700
> > >> > >>  t1 = T MOD 1461
> > >> > >>  IF t1 > 365 THEN
> > >> > >>  t1 = t1 - 1
> > >> > >>  oa = FIX(t1 / 365)
> > >> > >>  t1 = t1 MOD 365
> > >> > >>  END IF
> > >> > >>  aa = t2 + oa
> > >> > >>  dias = t1 + 1
> > >> > >>  dd = dias
> > >> > >>  swb = 1 - SGN(oa)
> > >> > >>  IF dd > 212 + swb THEN dd = dd + 30  IF dd > 59 + swb THEN dd =
> > >> > >> dd + 2 - swb  mm = FIX(dd / 61) * 2 + 1  dd = dd MOD 61  IF dd >
> > >> > >> 31 THEN mm = mm + 1: dd = dd - 31  IF mm > 7 THEN mm = mm - 1
> > >> > >> FechaJulDMA = dias  END FUNCTION
> > >> > >>
> > >> >
> > >> >
> > >> > --
> > >> > Coco mailing list
> > >> > Coco at maltedmedia.com
> > >> > https://pairlist5.pair.net/mailman/listinfo/coco
> > >> >
> > >>
> > >>
> > >>
> > >>
> > >> Christopher R. Hawks
> > >> HAWKSoft
> > >> --
> > >> I dipped into the future far as human eye could see, Saw the vision
> > >> of the world and all the wonder that would be.
> > >>                 --Alfred Lord Tennyson
> > >> ----------------------------------------
> > >>        \   ^__^
> > >>         \  (oo)\_______
> > >>            (__)\       )\/\
> > >>                ||----w |
> > >>                ||     ||
> > >>
> > >> --
> > >> Coco mailing list
> > >> Coco at maltedmedia.com
> > >> https://pairlist5.pair.net/mailman/listinfo/coco
> > >>
> > >
> >
> > --
> > Coco mailing list
> > Coco at maltedmedia.com
> > https://pairlist5.pair.net/mailman/listinfo/coco
> >
> >
> > --
> > Coco mailing list
> > Coco at maltedmedia.com
> > https://pairlist5.pair.net/mailman/listinfo/coco
> >
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list