AutoHotkey Community

It is currently May 25th, 2012, 9:45 pm

All times are UTC [ DST ]




Post new topic Reply to topic  [ 2 posts ] 
Author Message
 Post subject: Julian dates
PostPosted: November 26th, 2007, 10:06 am 
Offline

Joined: November 9th, 2007, 4:44 pm
Posts: 20
Location: http://taplpoker.com/
heres a function set and test script for working to and from julian dates
that someone else may find useful.

Code:
/*
Available Functions:
gojulian(y,m,d,pd) - converts to julian
goconvertback(JD,pd) - converts from julian
DAYWEEK(JD,par) - gets day of week from julian
Julian date is best for adding days between dates or to find number days between dates
taken from fortran script, simplified as much as possible
use SetFormat, Float ,0.0 before calling
Dave Anderson 11/24/2007
V1.0
*/
;===== converts to julian date 5 digits or 7 digits ========
;===== y=year, m=month, d=day pd =1 for 5 digits, anything else 7 digits==============================
gojulian(y,m,d,pd)
{
    if (m < 3) {
        m += 12
        y--
    }
   jdn:=-678972+d+((153*m-2)//5)+365*y+(y//4)-(y//100)+(y//400)
   if (pd=1)
      return , jdn
   else
      return, jdn+2400000
}

;==============convert from julian date ============================
;====JD= 5 or 7 digit julian date, pd =1 for yyyymmdd, 2 for MMM d, yyyy=
goconvertback(JD,pd)
{
if StrLen(JD)=7
   JD-=2400000
A:=JD+2468569, C:=JD//36524+68, F:=(a-(((146097*C)+3)//4))
g:=(4000*(F+1)//1461001), L := F-(1461*g//4)+31
J := (80*L)//2447, D := L-(2447)*J//80, B := J//11
J := J+2-(12*B), Y := (100*(C-49))+g+B
sr=0%D%
StringRight ,D,sr,2
sr=0%j%
StringRight ,J,sr,2
if (pd=2)
   {
   M:=MONTH(J)
   date=%M% %D%, %Y%
   return , %date%
   }
date=%Y%%J%%D%
return , %date%
}

MONTH(J)
{
Monstr=OOJanFebMarAprMayJunJulAugSepOctNovDec
StringMid, M,Monstr,J*3,3
RETURN , M
}

;============ returns 3 digit weekday ============
;par is 1 = numerical day (1-7), 2 = 3 digit Abreviation (Sun-Sat)
DAYWEEK(JD,par)
{
Daystr=OOSunMonTueWedThuFriSat
if StrLen(JD)=7
   JD-=2400000
NDW:=mod(JD+2,7)+1
if (par=1)
   {
   StringMid, DW,Daystr,NDW*3,3
   return, DW
   }
RETURN , NDW
}



and the test script:

Code:
;SetFormat , Float,0.0
CYear=%A_YYYY% ;current 4 digit year 2007
CMonth=%A_MM% ;current 2 digit month ie 01
CDay=%A_DD% ;current 2 digit day ie 21
MsgBox , date being sent for conversion %CYear% %CMonth% %CDay%

;=============== get julian date in 5 digit version ===========
JDN:=gojulian(CYear,CMonth,CDay,1)
MsgBox , the julian date is %JDN%

;get Day of Week in 3 digit Abbreviation ie Mon from julian =========================
DWA:=DAYWEEK(JDN,1)
MsgBox , Day of Week Abbrev is %DWA%

;get day of week number 1-7 from julian ==============================================
DWN:=DAYWEEK(JDN,2)
MsgBox , Day of Week Number is %DWN%
JDN+=5 ; add 5 days ================================================================
;===================================convert from julian date starts here ============
;======================= sending JDN removing all right of decimal point ===========
; =========================dont need the time of day part of julian date ===========
Transform,JDNc,Round,JDN
MsgBox , Julian Date being converted %JDNc%
dateT:=goconvertback(JDNc,1) ; returns 8 digit date in YYYYMMDD format =============
MsgBox , 8 digit date = %dateT%

dateT:=goconvertback(JDNc,2) ; returns date in MMM d, yyyyy format
MsgBox , Month day, year = %dateT%
Exit

#Include, JulianFunctions.ahk



Hope someone finds it useful....


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: November 26th, 2007, 6:22 pm 
Offline

Joined: April 19th, 2005, 10:26 am
Posts: 2249
Location: switzerland
thank you daveand5,
interesting script, here I used a script from Skan to use for google-search
( when no input calculates from yesterday ), for test just press okay
Code:
;--------------------- GREGORIAN TO JULIAN SKAN ---------------------------------
JULIAN:
 gui,7: Color, 000000

 LAC=mina OR mitag

 stringmid,DTS,A_NOW,1,8
 stringmid,THYm,A_NOW,1,6
 vanaf=%thym%01

 gui,7: Font, s10 cwhite, Verdana
 gui,7: Add, Text, x20   y10       h20 ,Search for
 gui,7: Add, Text, x20   y40       h20 ,VANAF
 gui,7: Add, Text, x20   y70       h20 ,UNTIL

 gui,7: Font , CDefault , FixedSys
 gui,7: Add, Edit, x130  y10  w350 h20  vLAC  ,%LAC%
 gui,7: Add, Edit, x130  y40  w100 h20  vVANAF ,               ;%vanaf%        ;vanaf
 gui,7: Add, Edit, x130  y70  w100 h20  vUNTIL,%DTS%           ;maybe today

 gui,7:Add,Button, x260  y70  w70  h20 gCALC,OK

       UNTIL2:=(JulianDate(%DTS%))
       DIF:=2                           ;minus 2 days
       VANAF2:=(UNTIL2-DIF)

 gui,7: Show,      x2   y2  w500 h100,JULIAN GOOGLE -2 days q=daterange:%VANAF2%-%UNTIL2% %LAC%
 return
;----------------------------------------------------------------------------------------------

 CALC:
 gui,7:submit,nohide

  if VANAF=
       {
       UNTIL2:=((JulianDate(%DTS%))+1)
       DIF:=2                         ;minus 1 days when no input
       VANAF2:=((UNTIL2-DIF)+1)
       }

  else
       {
       VANAF:=VANAF
       UNTIL:=UNTIL
       VANAF2:=((JulianDate(VANAF))+1)
       UNTIL2:=((JulianDate(UNTIL))+1)    ;plus one day
       }

    run,http://news.google.com/news?complete=1&hl=en&oe=UTF-8&um=1&ie=UTF-8&tab=in&q=daterange:%VANAF2%-%UNTIL2% `%22%LAC%`%22&scoring=n
7guiclose:
Gui,7:Destroy
exitapp
; return

;-----------------------------------------
      JulianDate( YMD="", ChkYMD=1, Rn=1 )
          {
      If ChkYMD
          FormatTime, YMD, %YMD%, yyyyMMdd

        Y := SubStr( YMD, 1,4 ) + 0
        M := SubStr( YMD, 5,2 ) + 0
        D := SubStr( YMD, 7,2 ) + 0

        If ( M<=2 )
           M := M+12, Y := Y-1
        A := 2 - Floor( Y/100 ) + Floor( Floor( Y/100 ) / 4 )
        B := Floor( 365.25  * ( Y+4716) )
        C := Floor( 30.6001 * ( M+1) )
        Return Rn ? Floor( A+B+C+D -1524.5 ) : Round( A+B+C+D -1524.5, 1 )
        }
   return


/*
;--------------------- GREGORIAN TO JULIAN SKAN ---------------------------------
;http://en.wikipedia.org/wiki/Julian_day
;http://www.astronomy.villanova.edu/links/jd.htm
;http://quasar.as.utexas.edu/BillInfo/JulianDatesG.html
;http://home.att.net/~srschmitt/siderealtime.html
;daterange:2454405-2454412 gwbasic
;example daterange:2454300-2454302 gwbasic [for google search 2007-07-21 ]
*/

;====================== END JULIAN GOOGLE daterange ===========================


Report this post
Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC [ DST ]


Who is online

Users browsing this forum: Bing [Bot], Exabot [Bot], Klark92 and 5 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group