我有一個 Mule Server 4.3.0 EE 應用程式,我想在其中將 DateTime 舍入到最近的四分之一小時,結果也是 DateTime。一些例子:
- 如果輸入是上午 9:18:32,則輸出是當天上午 9:15:00
- 如果輸入是上午 9:33:33,則輸出是當天上午 9:30:00
- 如果輸入是上午 9:59:58,則輸出是當天上午 9:45:00
- 如果輸入是上午 10:00:00,則輸出是當天上午 10:00:00
在此應用程式中,輸入將始終采用紐約時間,DST 是否生效取決于一年中的時間。
這是我到目前為止所想出的。保留日期和小時,將分鐘截斷到最接近的 15,將秒設定為零,并保留時區。(“00”分鐘有一個特殊情況,因為如果分鐘是單個“0”,它就不會轉換。)
我知道較新的 Mule 版本有 Dates 包,這會使它更加優雅,但升級目前不是我的選擇。這與滿足這些要求的代碼一樣好,還是有更好的方法可以在不升級 Mule 的情況下做到這一點?謝謝你。
%dw 2.0
import * from dw::core::Strings
output application/json
fun roundBack(inputTime: DateTime): DateTime =
(inputTime[0 to 13]
(if (inputTime.minutes < 15) '00' else (inputTime.minutes - mod(inputTime.minutes, 15) as String))
':00'
inputTime[-6 to -1]
) as DateTime
uj5u.com熱心網友回復:
我相信邏輯是好的,但實作是脆弱的,因為它依賴于自動強制(使用范圍選擇器 [] 時的日期時間到字串)。我最好在轉換中明確表示,以避免由編輯器中的意外默認格式和警告引起的問題:
%dw 2.0
import * from dw::core::Strings
output application/json
fun roundBack(inputTime: DateTime): DateTime =
(
inputTime as String {format: "yyyy-MM-dd HH:"}
(if (inputTime.minutes < 15)
'00'
else (inputTime.minutes - mod(inputTime.minutes, 15)) as String
)
':00'
inputTime as String {format: "xxx"}
) as DateTime {format: "yyyy-MM-dd HH:mm:ssxxx"}
---
roundBack(|2020-10-01T23:57:59-04:00|)
輸出: "2020-10-01 23:45:00-04:00"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363562.html
