Converting Dates from CCYYMMDD to CCYYDDD!We were recently asked to convert from CCYYMMDD dates to CCYYDDD date, and I came up with the following:
:comment Step One: convert date to have a century field and a begining of year date in datefile def boy,1,4,double def century,1,4,double item boy,date,ccyymmdd item mydate,date,ccyymmdd ext mydate ext boy=$truncate(a / 10000) * 10000 + 0101 ext century=$truncate(a / 10000) out workfile,link xeq Step Two: Format and determine number of days since Beginning of Year. in workfile def newdate,1,4,double ext mydate ext boy ext century ext diff=$days(mydate) - $days(boy) + 1 ext newdate=(century * 1000) + ($days(a) - $days(boy) + 1) out convert,link xeqYou can see the results below including the starting date, you don't need to include all the fields in the result file:
>IN convert (0) >OUT $NULL (0) MYDATE = 20141213 BOY = 20140101 CENTURY = 2014 DIFF = 347 NEWDATE = 2014347 >IN convert (1) >OUT $NULL (1) MYDATE = 20131221 BOY = 20130101 CENTURY = 2013 DIFF = 355 NEWDATE = 2013355 >IN convert (2) >OUT $NULL (2) MYDATE = 20150321 BOY = 20150101 CENTURY = 2015 DIFF = 80 NEWDATE = 2015080 >IN convert (3) >OUT $NULL (3) MYDATE = 20100904 BOY = 20100101 CENTURY = 2010 DIFF = 247 NEWDATE = 2010247 IN=4, OUT=4. CPU-Sec=1. Wall-Sec=1.The basis of this was to take the current date and make up a second date and make up the Beginning Of Year date, and use $days and get the difference in days between the current date and the Beginning of Year. Thus the "Julian Date" or ccyyDDD, is the current century * 1000, plus the number of days difference (+1) from the beginning of the year.