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 }