1:- use_module(library(regex)).    2
    3duration(Duration)              --> oneOrMore(token,Tokens),
    4	{
    5	 atomic_list_concat(Tokens,'',TmpTimeUnits),
    6	 atomic_list_concat([Date,Time],'_',TmpTimeUnits),
    7	 atomic_list_concat([AY,AM,AD],'-',Date),
    8	 atomic_list_concat([AH,AMi,AS],':',Time),
    9	 atom_number(AY,Y),atom_number(AM,M),atom_number(AD,D),atom_number(AH,H),atom_number(AMi,Mi),atom_number(AS,S),
   10	 Duration = [Y-M-D,H:Mi:S]
   11	}.
   12
   13dateTimeZone(DateTimeZone)      --> oneOrMore(token,Tokens),
   15	{
   16	 Tokens = [TimeZoneSpec,:,DateTimeSpec],
   17	 atomic_list_concat([_,TimeZone],'=',TimeZoneSpec),
   18	 atomic_list_concat([Date,Time],'T',DateTimeSpec),
   19	 regex_atom("^([0-9]+)([0-9][0-9])([0-9][0-9])$",[],Date,[AD,AM,AY]),
   20	 regex_atom("^([0-9][0-9])([0-9][0-9])([0-9][0-9])$",[],Time,[AS,AMi,AH]),
   21	 atom_codes(BY,AY),atom_codes(BM,AM),atom_codes(BD,AD),atom_codes(BH,AH),atom_codes(BMi,AMi),atom_codes(BS,AS),	
   22	 atom_number(BY,Y),atom_number(BM,M),atom_number(BD,D),atom_number(BH,H),atom_number(BMi,Mi),atom_number(BS,S),
   23	 DateTimeZone = [[Y-M-D,H:Mi:S],TimeZone]
   24	}