-
Key: DMN17-7
-
Status: open
-
Source: ACTICO ( Daniel Thanner)
-
Summary:
The specification says that the addition/subtraction of a date and time and a years and months duration value is defined as:
date and time ( date(e1.year +/– e2.years + floor((e1.month+/– e2.months)/12), e1.month +/– e2.months – floor((e1.month +/– e2.months)/12) * 12, e1.day), time(e1))
If you apply this expression to the following two values:
- date and time("2017-08-30T11:00:00Z")
- duration("P18M")
you would expect the following results:
date and time("2017-08-30T11:00:00Z") + duration("P18M") --> result should be date and time("2019-02-28T11:00:00Z") date and time("2017-08-30T11:00:00Z") - duration("P18M") --> result should be date and time("2016-02-29T11:00:00Z")
If you apply the values to the defined formula, you get:
date and time ( date(2017 +/– 1 + floor((8 +/– 6)/12), 8 +/– 6 – floor((8 +/– 6)/12) * 12, 30), time("11:00:00Z"))
Addition
which results for addition into:date and time ( date(2018 + floor(1,1667), 14 – floor(1,1667) * 12, 30), time("11:00:00Z"))
which is:
date and time (date(2019, 2, 30), time("11:00:00Z"))
The adjustment to the last valid day in a month is missing. 30th February is invalid, since February has only 28/29 days.
Subtraction
which results for subtraction into:date and time ( date(2016 + floor(0,1667), 2 – floor(0,1667) * 12, 30), time("11:00:00Z"))
which is:
date and time (date(2016, 2, 30), time("11:00:00Z"))
The adjustment to the last valid day in a month is missing. 30th February is invalid, since February has only 28/29 days.
Recommendation:
Adjustment to last valid day in month must be added to spec. -
Reported: DMN 1.1 — Mon, 2 Oct 2017 12:41 GMT
-
Updated: Fri, 21 Jun 2024 17:56 GMT
DMN17 — No adjustment for last day in month if duration is added/subtracted to date and time value
- Key: DMN17-7
- OMG Task Force: Decision Model and Notation 1.7 RTF