Prolog 获取两个日期之间的天数差异
Prolog Get the differences in days between two dates
我一直在尝试比较 prolog 中的 2 个日期。
日期格式为 date(YYYY, MM, DD)
例如:(2016,04,21).
我想比较两个日期并了解这些日期之间的差异(以天为单位)是否大于 15 天(2 周)。
%dateDifference( number_of_day, date_no1, date_no2 ).
dateDifference( 35, date(2003,8,16), date(2003,9,20) ).
首先,您应该记下@Boris 的备注,
第二,
为了简化问题,你的谓词分为三个部分:
第 1 部分:
- 知道年份是闰年还是闰年,
- 影响每个月的天数,
- 最后这部分遵循以下规则;
代码:
calcule_days([Y,M,D],Res):-
Res is (((Y*1461)/4)+((M*153)/5)+D).
第 2 部分:
- 计算两个日期之间的差异所以
- 将
formula
(第 1 部分)应用于日期 1 和日期 2,
- 计算两个结果的差值
difference_date1_date2
,
- 为避免负号添加
abs(difference_date1_date2)
- 获得增值的方法
round (result_abs_pred)
演示代码:
dateDifference(NumberOfDays,date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...
第 3 部分:
- 测试结果是否为
>= 15
,结果必须为True/false
演示代码:
bigger_2weeks(date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...
计算两个日期之间的天数差异可能很简单,也可能很棘手,具体取决于日历和涵盖的时间段。假设公历,常见的解决方案是将日期转换为儒略日。正如@mat 在其评论中提到的,对于 SWI-Prolog,请考虑 library(julian)
;
https://github.com/mndrix/julian
对于可与大多数 Prolog 系统(包括 SWI-Prolog)一起使用的便携式解决方案,Logtalk 包含可用于这些计算的第三方 ISO 8601 库:
我一直在尝试比较 prolog 中的 2 个日期。
日期格式为 date(YYYY, MM, DD)
例如:(2016,04,21).
我想比较两个日期并了解这些日期之间的差异(以天为单位)是否大于 15 天(2 周)。
%dateDifference( number_of_day, date_no1, date_no2 ).
dateDifference( 35, date(2003,8,16), date(2003,9,20) ).
首先,您应该记下@Boris 的备注, 第二, 为了简化问题,你的谓词分为三个部分:
第 1 部分:
- 知道年份是闰年还是闰年,
- 影响每个月的天数,
- 最后这部分遵循以下规则;
代码:
calcule_days([Y,M,D],Res):-
Res is (((Y*1461)/4)+((M*153)/5)+D).
第 2 部分:
- 计算两个日期之间的差异所以
- 将
formula
(第 1 部分)应用于日期 1 和日期 2, - 计算两个结果的差值
difference_date1_date2
, - 为避免负号添加
abs(difference_date1_date2)
- 获得增值的方法
round (result_abs_pred)
演示代码:
dateDifference(NumberOfDays,date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...
第 3 部分:
- 测试结果是否为
>= 15
,结果必须为True/false
演示代码:
bigger_2weeks(date(YEAR1,MONTH1,DAY1),date(YEAR2,MONTH2,DAY2)):-
...
计算两个日期之间的天数差异可能很简单,也可能很棘手,具体取决于日历和涵盖的时间段。假设公历,常见的解决方案是将日期转换为儒略日。正如@mat 在其评论中提到的,对于 SWI-Prolog,请考虑 library(julian)
;
https://github.com/mndrix/julian
对于可与大多数 Prolog 系统(包括 SWI-Prolog)一起使用的便携式解决方案,Logtalk 包含可用于这些计算的第三方 ISO 8601 库: