Все строительные блоки:
?- date_time_stamp(date(2020,4,15,0,0,0,Off,TZ,DST),TimeStamp).
Off = -7200,
TZ = 'CEST',
DST = true,
TimeStamp = 1586901600.0.
?- NDays=20,Next is $TimeStamp+60*60*24*NDays.
NDays = 20,
Next = 1588629600.0,
TimeStamp = 1586901600.0.
?- stamp_date_time($Next,DT,local).
DT = date(2020, 5, 5, 0, 0, 0.0, -7200, 'CEST', true),
Next = 1588629600.0.
Обозначение $TimeStamp
- это удобная функция SWI-Prolog в REPL (то есть, интерактивный интерпретатор), которая дает нам последнее значение, которое переменная TimeStamp
была привязана.
Ясно, что вам лучше инкапсулировать сложность в вашем собственном аппликативном интерфейсе.
Документация также намекает по-другому, просто добавьте число дней до поля дня структуры date / 9, чтобы получить соответствующую метку времени.
Тогда целое может быть:
goes :-
write('enter date as `YYYY-MM-DD.`:'),
read(YYYY-MM-DD),
D1 is DD+20,
date_time_stamp(date(YYYY,MM,D1,0,0,0,_,_,_),Stamp),
stamp_date_time(Stamp,D,local),
date_time_value(date,D,DV),
format('result date:~w', [DV]).