code

Name
Astradyne (UK) Ltd
Scriptlanguage
Plain Text
Tabwidth
4
Date
Mon, 20 Mar 2017 17:42:36 +0000
IP
192.168.0.1

Various techniques for converting dates between formats and data types in RPG.

  1.     H Option(*NoDebugIO)
  2.  
  3.     D @CharA          s              8a  Inz('13/12/21')                      ‚Dec 21st, 2013
  4.     D @CharB          s            10a  Inz('22/12/2013')                    ‚Dec 22nd, 2013
  5.     D @CharC          s              8a  Inz('23/12/13')                      ‚Dec 23rd, 2013
  6.  
  7.     D @DateA          s              d  Inz(D'2013-12-24')                  ‚Dec 24th, 2013
  8.  
  9.     D @NumA          s              6s 0 Inz(131225)                          ‚Dec 25th, 2013
  10.     D @NumB          s              7s 0 Inz(1131226)                        ‚Dec 26th, 2013
  11.     D @NumC          s              8s 0 Inz(20131227)                        ‚Dec 27th, 2013
  12.     D @NumD          s              6s 0 Inz(281213)                          ‚Dec 28th, 2013
  13.     D @NumE          s              8s 0 Inz(29122013)                        ‚Dec 29th, 2013
  14.  
  15.     D @Jde            s              6s 0 Inz(113364)                          ‚Dec 30th, 2013
  16.  
  17.     D WeekNo          s              2p 0
  18.     D WeekMonth      s              2p 0
  19.     D LastWkInMth    s              2p 0
  20.     D DayOfWeek      s              1p 0
  21.     D DayOfMonth      s              2p 0
  22.     D LastDayMonth    s              2p 0
  23.     D StartOfMonth    s              d
  24.     D EndOfMonth      s              d
  25.     D Today          s              d
  26.  
  27.       /Free
  28.           If 0=1;
  29.  
  30.           //‚Character to Character...
  31.           @CharB = %Char(%Date(@CharA : *YMD/) : *EUR);      //‚yy/mm/dd to dd.mm.yyyy
  32.           @CharC = %Char(%Date(@CharA : *YMD/) : *DMY/);    //‚yy/mm/dd to dd/mm/yy
  33.           @CharA = %Char(%Date(@CharB : *EUR ) : *YMD/);    //‚dd/mm/ccyy to yy/mm/dd'
  34.           @CharC = %Char(%Date(@CharB : *EUR ) : *DMY/);    //‚dd/mm/ccyy to dd/mm/yy'
  35.           @CharA = %Char(%Date(@CharC : *DMY/) : *YMD/);    //‚dd/mm/yy to yy/mm/dd'
  36.           @CharB = %Char(%Date(@CharC : *DMY/) : *EUR );    //‚dd/mm/yy to dd.mm.ccyy'
  37.  
  38.           //‚Character to Date...
  39.           @DateA = %Date(@CharA : *YMD/);    //‚yy/mm/dd  to ccyy-mm-dd
  40.           @DateA = %Date(@CharB : *EUR);      //‚dd.mm.ccyy to ccyy-mm-dd
  41.           @DateA = %Date(@CharC : *DMY/);    //‚dd/mm/yy  to ccyy-mm-dd
  42.  
  43.           //‚Character to Numeric...
  44.           @numA = %Dec(%Char(%Date(@CharA:*YMD/):*YMD0):6:0);  //‚yy/mm/dd  to yymmdd
  45.           @numB = %Dec(%Char(%Date(@CharA:*YMD/):*CYMD0):7:0); //‚yy/mm/dd  to cyymmdd
  46.           @numC = %Dec(%Char(%Date(@CharA:*YMD/):*ISO0):8:0);  //‚yy/mm/dd  to ccyymmdd
  47.           @numD = %Dec(%Char(%Date(@CharA:*YMD/):*DMY0):7:0);  //‚yy/mm/dd  to ddmmyy
  48.           @numE = %Dec(%Char(%Date(@CharA:*YMD/):*EUR ):8:0);  //‚yy/mm/dd  to ddmmyyyy
  49.  
  50.           @numA = %Dec(%Char(%Date(@CharB:*EUR ):*YMD0):6:0);  //‚dd/mm/ccyy to yymmdd
  51.           @numB = %Dec(%Char(%Date(@CharB:*EUR ):*CYMD0):7:0); //‚dd/mm/ccyy to cyymmdd
  52.           @numC = %Dec(%Char(%Date(@CharB:*EUR ):*ISO0):8:0);  //‚dd/mm/ccyy to ccyymmdd
  53.           @numD = %Dec(%Char(%Date(@CharB:*EUR ):*DMY0):7:0);  //‚dd/mm/ccyy to ddmmyy
  54.           @numE = %Dec(%Char(%Date(@CharB:*EUR ):*EUR ):8:0);  //‚dd/mm/ccyy to ddmmyyyy
  55.  
  56.           @numA = %Dec(%Char(%Date(@CharC:*DMY/):*YMD0):6:0);  //‚dd/mm/yy  to yymmdd
  57.           @numB = %Dec(%Char(%Date(@CharC:*DMY/):*CYMD0):7:0); //‚dd/mm/yy  to cyymmdd
  58.           @numC = %Dec(%Char(%Date(@CharC:*DMY/):*iso0):8:0);  //‚dd/mm/yy  to ccyymmdd
  59.           @numD = %Dec(%Char(%Date(@CharC:*DMY/):*DMY0):7:0);  //‚dd/mm/yy  to ddmmyy
  60.           @numE = %Dec(%Char(%Date(@CharC:*DMY/):*EUR ):8:0);  //‚dd/mm/yy  to ddmmyyyy
  61.  
  62.           //‚Date to Character...
  63.           @CharA = %Char(@DateA : *YMD/);      //‚ccyy-mm-dd to yy/mm/dd
  64.           @CharB = %Char(@DateA : *EUR );      //‚ccyy-mm-dd to dd.mm.ccyy
  65.           @CharC = %Char(@DateA : *DMY/);      //‚ccyy-mm-dd to dd/mm/yy
  66.  
  67.  
  68.           //‚Date to Numeric...
  69.           @NumA = %Dec(%Char(@DateA : *YMD0)  : 6 : 0);      //‚D'ccyy-mm-dd' to yymmdd
  70.           @NumB = %Dec(%Char(@DateA : *CYMD0) : 7 : 0);      //‚D'ccyy-mm-dd' to cyymmdd
  71.           @NumC = %Dec(%Char(@DateA : *ISO0)  : 8 : 0);      //‚D'ccyy-mm-dd' to ccyymmdd
  72.           @NumD = %Dec(%Char(@DateA : *DMY0)  : 6 : 0);      //‚D'ccyy-mm-dd' to ddmmyy
  73.           @NumE = %Dec(%Char(@DateA : *EUR)  : 8 : 0);      //‚D'ccyy-mm-dd' to ddmmccyy
  74.  
  75.           //‚Numeric to Character...
  76.           @charA = %char(%date(@numA : *YMD)  : *YMD/);      //‚yymmdd to 'yy/mm/dd'
  77.           @charB = %char(%date(@numA : *YMD)  : *EUR );      //‚yymmdd to 'dd/mm/ccyy'
  78.           @charC = %char(%date(@numA : *YMD)  : *DMY/);      //‚yymmdd to 'dd/mm/yy'
  79.  
  80.           @charA = %char(%date(@numB : *CYMD) : *YMD/);      //‚cyymmdd to 'yy/mm/dd'
  81.           @charB = %char(%date(@numB : *CYMD) : *EUR );      //‚cyymmdd to 'dd/mm/ccyy'
  82.           @charC = %char(%date(@numB : *CYMD) : *DMY/);      //‚cyymmdd to 'dd/mm/yy'
  83.  
  84.           @charA = %char(%date(@numC : *ISO)  : *YMD/);      //‚D'ccyy-mm-dd' to 'yy/mm/dd'
  85.           @charB = %char(%date(@numC : *ISO)  : *EUR );      //‚D'ccyy-mm-dd' to 'dd/mm/ccyy'
  86.           @charC = %char(%date(@numC : *ISO)  : *DMY/);      //‚D'ccyy-mm-dd' to 'dd/mm/yy'
  87.  
  88.           @charA = %char(%date(@numD : *DMY)  : *YMD/);      //‚ddmmyy to 'yy/mm/dd'
  89.           @charB = %char(%date(@numD : *DMY)  : *EUR );      //‚ddmmyy to 'dd/mm/ccyy'
  90.           @charC = %char(%date(@numD : *DMY)  : *EUR );      //‚ddmmyy to 'dd/mm/yy'
  91.  
  92.           @charA = %char(%date(@numE : *EUR)  : *YMD/);      //‚ddmmccyy to 'yy/mm/dd'
  93.           @charB = %char(%date(@numE : *EUR)  : *EUR );      //‚ddmmccyy to 'dd/mm/ccyy'
  94.           @charC = %char(%date(@numE : *EUR)  : *DMY/);      //‚ddmmccyy to 'dd/mm/yy'
  95.  
  96.           //‚Numeric to Date...
  97.           @DateA = %Date(@NumA : *YMD);      //‚yymmdd  to D'ccyy-mm-dd'
  98.           @DateA = %Date(@NumD : *DMY);      //‚ddmmyy  to D'ccyy-mm-dd'
  99.           @DateA = %Date(@NumB : *CYMD);      //‚cyymmdd  to D'ccyy-mm-dd'
  100.           @DateA = %Date(@NumC : *ISO);      //‚ccyymmdd to D'ccyy-mm-dd'
  101.           @DateA = %Date(@NumE : *EUR );      //‚ddmmccyy to D'ccyy-mm-dd'
  102.  
  103.  
  104.           //‚Numeric to Numeric...
  105.           @NumB = %Dec(%Char(%Date(@NumA : *YMD) : *CYMD0) : 7 : 0);      //‚yymmdd to cyymmdd
  106.           @NumC = %Dec(%Char(%Date(@NumA : *YMD) : *ISO0)  : 8 : 0);      //‚yymmdd to ccyymmdd
  107.           @NumD = %Dec(%Char(%Date(@NumA : *YMD) : *DMY0)  : 6 : 0);      //‚yymmdd to ddmmyy
  108.           @NumE = %Dec(%Char(%Date(@NumA : *YMD) : *EUR0)  : 8 : 0);      //‚yymmdd to ddmmccyy
  109.  
  110.           @NumA = %Dec(%Char(%Date(@NumB : *CYMD) : *YMD0) : 6 : 0);      //‚cyymmdd to yymmdd
  111.           @NumC = %Dec(%Char(%Date(@NumB : *CYMD) : *ISO0) : 8 : 0);      //‚cyymmdd to ccyymmdd
  112.           @NumD = %Dec(%Char(%Date(@NumB : *CYMD) : *dmy0) : 6 : 0);      //‚cyymmdd to ddmmyy
  113.           @NumE = %Dec(%Char(%Date(@NumB : *CYMD) : *EUR0) : 8 : 0);      //‚cyymmdd to ddmmccyy
  114.  
  115.           @NumA = %Dec(%Char(%Date(@NumC : *ISO) : *YMD0)  : 6 : 0);      //‚ccyymmdd to yymmdd
  116.           @NumB = %Dec(%Char(%Date(@NumC : *ISO) : *CYMD0) : 7 : 0);      //‚ccyymmdd to cyymmdd
  117.           @NumD = %Dec(%Char(%Date(@NumC : *ISO) : *DMY0)  : 6 : 0);      //‚ccyymmdd to ddmmyy
  118.           @NumE = %Dec(%Char(%Date(@NumC : *ISO) : *EUR0)  : 8 : 0);      //‚ccyymmdd to ddmmccyy
  119.  
  120.           @NumA = %Dec(%Char(%Date(@NumD : *DMY) : *DMY0)  : 6 : 0);      //‚ddmmyy to yymmdd
  121.           @NumB = %Dec(%Char(%Date(@NumD : *DMY) : *CYMD0) : 7 : 0);      //‚ddmmyy to cyymmdd
  122.           @NumC = %Dec(%Char(%Date(@NumD : *DMY) : *ISO0)  : 8 : 0);      //‚ddmmyy to ccyymmdd
  123.           @NumE = %Dec(%Char(%Date(@NumD : *DMY) : *EUR0)  : 8 : 0);      //‚ddmmyy to ddmmccyy
  124.  
  125.           @NumA = %Dec(%Char(%Date(@NumE : *EUR) : *YMD0)  : 6 : 0);      //‚ddmmccyy to yymmdd
  126.           @NumB = %Dec(%Char(%Date(@NumE : *EUR) : *CYMD0) : 7 : 0);      //‚ddmmyyyy to cyymmdd
  127.           @NumC = %Dec(%Char(%Date(@NumE : *EUR) : *ISO0)  : 8 : 0);      //‚ddmmyyyy to ccyymmdd
  128.           @NumD = %Dec(%Char(%Date(@NumE : *EUR) : *DMY0)  : 6 : 0);      //‚ddmmyyyy to ddmmyy
  129.  
  130.           //‚JDE Dates...
  131.           @DateA = %Date(@Jde + 1900000 : *LongJul);                      //‚cyyddd to Date
  132.           @Jde  = %Int(%char(@DateA : *LongJul0) ) - 1900000;            //‚Date to cyyddd
  133.  
  134.           EndIf;
  135.  
  136.           //‚SQL Date techniques...
  137.           //‚----------------------
  138.           Today = %Date();
  139.  
  140.           Exec SQL    set option datfmt = *iso;
  141.  
  142.           Exec SQL    set :WeekNo      = week_iso(:Today);
  143.           Exec SQL    set :DayOfWeek  = dayofweek(:Today);
  144.           Exec SQL    set :DayOfMonth  = dayofmonth(:Today);
  145.           Exec SQL    set :EndofMonth  = last_day(:Today);
  146.           Exec SQL    set :LastDayMonth = dayofmonth(:EndOfMonth);
  147.  
  148.           StartOfMonth = Today - %days(DayOfMonth - 1);
  149.  
  150.           Exec SQL    set :WeekMonth = week_iso(:StartOfMonth);
  151.           Exec SQL    set :LastWkInMth = week_iso(:EndOfMonth);
  152.  
  153.           LastWkInMth = LastWkInMth - WeekMonth + 1;
  154.           WeekMonth = WeekNo - WeekMonth + 1;
  155.  
  156.           //‚Exit program...
  157.           *InLR = *On;
  158.  
  159.       /End-Free