[
https://issues.apache.org/jira/browse/NIFI-15658?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Richard Scott updated NIFI-15658:
---------------------------------
Description:
NiFi Expression Language currently provides {{toDate()}} for parsing values
into a {{{}Date{}}}, and {{toInstant()}} for parsing values into an
{{{}Instant{}}}, but it does not provide a simple built-in way to add or
subtract a duration from either parsed value.
As a result, users who want to shift a parsed date or instant often need to
convert the value to a numeric representation, perform arithmetic in
milliseconds, and then convert or format the result again. This makes common
time-based operations harder to read, harder to maintain, and less intuitive
than they should be.
For example, users should be able to write:
${myDate:toDate("dd-MM-yyyy"):plusDuration("1 week"):format("dd-MM-yyyy")}
${myTimestamp:toInstant("dd-MM-yyyy HH:mm:ss", "UTC"):plusInstantDuration("1
week"):formatInstant("dd-MM-yyyy HH:mm:ss", "UTC")}
instead of relying on number-based arithmetic after parsing.
h3. Proposed new functions
For {{Date}} values:
* {{plusDuration(String duration)}}
* {{minusDuration(String duration)}}
For {{Instant}} values:
* {{plusInstantDuration(String duration)}}
* {{minusInstantDuration(String duration)}}
h3. Supported units
The {{duration}} argument should support:
* years
* months
* weeks
* days
* hours
* minutes
* seconds
h3. Validation requirements
The {{duration}} argument should be validated strictly.
Examples of valid inputs:
* {{"1 day"}}
* {{"2 weeks"}}
* {{"3 months"}}
Examples of invalid inputs:
* {{"B weeks"}}
* {{"1 dog"}}
* {{"ten days"}}
Invalid duration strings should cause the expression to be considered invalid
rather than being interpreted leniently.
h3. Expected behavior
{{plusDuration()}} and {{minusDuration()}} should:
* operate on {{Date}} values
* return {{Date}} values
* support natural chaining with existing date-related Expression Language
functions such as {{format()}}
{{plusInstantDuration()}} and {{minusInstantDuration()}} should:
* operate on {{Instant}} values
* return {{Instant}} values
* support natural chaining with existing instant-related Expression Language
functions such as {{formatInstant()}}
For {{Instant}} values, arithmetic should be evaluated in UTC so results are
deterministic across environments.
h3. Benefit
This enhancement would make date and time arithmetic in Expression Language far
easier to read and write, especially when working with values already parsed
using {{toDate()}} or {{{}toInstant(){}}}. It would also reduce the need for
awkward millisecond-based calculations for common operations such as adding
days, weeks, months, or years.
was:
NiFi Expression Language provides {{toDate()}} for parsing values into a
{{{}Date{}}}, but there is no simple built-in way to then add or subtract time
from that {{{}Date{}}}.
Currently, users wanting to shift a parsed date must often convert the {{Date}}
back to a numeric value, perform arithmetic in milliseconds, and then convert
or format the result again. This is awkward and makes common date operations
harder to read and maintain.
For example, users should be able to write:
$\{myDate:toDate("dd-MM-yyyy"):{{{}plusDuration{}}}("1
week"):format("dd-MM-yyyy")}
instead of relying on number-based date arithmetic after parsing.
Proposed new functions:
* {{plusDuration(String duration)}}
* {{minusDuration(String duration)}}
Supported units:
* years
* months
* weeks
* days
* hours
* minutes
* seconds
The duration argument should be validated strictly, for example:
* valid: {{{}"1 day"{}}}, {{{}"2 weeks"{}}}, {{"3 months"}}
* invalid: {{{}"B weeks"{}}}, {{{}"1 dog"{}}}, {{"ten days"}}
Both functions should operate on and return {{Date}} values so they can be
chained naturally with existing date-related Expression Language functions such
as {{{}format(){}}}.
> Add plusDuration,minusDuration / plusInstantDuration,minusInstantDuration
> functions to NiFi Expression Language for date/instant arithmetic
> -------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: NIFI-15658
> URL: https://issues.apache.org/jira/browse/NIFI-15658
> Project: Apache NiFi
> Issue Type: Improvement
> Components: Core Framework, Extensions
> Affects Versions: 2.8.0
> Reporter: Richard Scott
> Assignee: Richard Scott
> Priority: Minor
> Time Spent: 20m
> Remaining Estimate: 0h
>
> NiFi Expression Language currently provides {{toDate()}} for parsing values
> into a {{{}Date{}}}, and {{toInstant()}} for parsing values into an
> {{{}Instant{}}}, but it does not provide a simple built-in way to add or
> subtract a duration from either parsed value.
> As a result, users who want to shift a parsed date or instant often need to
> convert the value to a numeric representation, perform arithmetic in
> milliseconds, and then convert or format the result again. This makes common
> time-based operations harder to read, harder to maintain, and less intuitive
> than they should be.
> For example, users should be able to write:
> ${myDate:toDate("dd-MM-yyyy"):plusDuration("1 week"):format("dd-MM-yyyy")}
> ${myTimestamp:toInstant("dd-MM-yyyy HH:mm:ss", "UTC"):plusInstantDuration("1
> week"):formatInstant("dd-MM-yyyy HH:mm:ss", "UTC")}
>
> instead of relying on number-based arithmetic after parsing.
> h3. Proposed new functions
> For {{Date}} values:
> * {{plusDuration(String duration)}}
> * {{minusDuration(String duration)}}
> For {{Instant}} values:
> * {{plusInstantDuration(String duration)}}
> * {{minusInstantDuration(String duration)}}
> h3. Supported units
> The {{duration}} argument should support:
> * years
> * months
> * weeks
> * days
> * hours
> * minutes
> * seconds
> h3. Validation requirements
> The {{duration}} argument should be validated strictly.
> Examples of valid inputs:
> * {{"1 day"}}
> * {{"2 weeks"}}
> * {{"3 months"}}
> Examples of invalid inputs:
> * {{"B weeks"}}
> * {{"1 dog"}}
> * {{"ten days"}}
> Invalid duration strings should cause the expression to be considered invalid
> rather than being interpreted leniently.
> h3. Expected behavior
> {{plusDuration()}} and {{minusDuration()}} should:
> * operate on {{Date}} values
> * return {{Date}} values
> * support natural chaining with existing date-related Expression Language
> functions such as {{format()}}
> {{plusInstantDuration()}} and {{minusInstantDuration()}} should:
> * operate on {{Instant}} values
> * return {{Instant}} values
> * support natural chaining with existing instant-related Expression Language
> functions such as {{formatInstant()}}
> For {{Instant}} values, arithmetic should be evaluated in UTC so results are
> deterministic across environments.
> h3. Benefit
> This enhancement would make date and time arithmetic in Expression Language
> far easier to read and write, especially when working with values already
> parsed using {{toDate()}} or {{{}toInstant(){}}}. It would also reduce the
> need for awkward millisecond-based calculations for common operations such as
> adding days, weeks, months, or years.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)