/pliant/util/encoding/date.pli
 
 1  function rfc1123_date dt -> s 
 2    arg DateTime dt ; arg Str s 
 3    var Int year month day hour minute second ; var Float fraction 
 4    dt split year month day hour minute second fraction  
 5    var Str dow := day_name dt:day_of_week 
 6    := upper:(dow 0 1)+(dow 1 2) 
 7    += ", "+(right string:day "0") 
 8    += " "+("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec" (month-1)*4 3) 
 9    += " "+string:year 
 10    += " "+(right string:hour "0") 
 11    += ":"+(right string:minute "0") 
 12    += ":"+(right string:second "0") 
 13    += " GMT" 
 14   
 15  function rfc1123_date s -> dt 
 16    arg Str s ; arg DateTime dt 
 17    var Str timestamp := replace "-" " " 
 18    if (timestamp parse any "," (var Int day) _ any:(var Str mon) _ (var Int year) _ (var Int hour) ":" (var Int minute) ":" (var Int second) any) 
 19      var Int month := ("jan feb mar apr may jun jul aug sep oct nov dec" search lower:(mon 0 3) -4)\4+1 
 20      year += shunt year>=1000 0 year>=80 1900 2000 
 21      dt := datetime year month day hour minute second 0 
 22    else 
 23      dt := undefined  
 24   
 25  export rfc1123_date 
 26   
 27