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
xeq
You 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.
No comments:
Post a Comment