日期格式 - Dataweave

Date Formatting - Dataweave

我使用两个日期函数将 Date/Times 转换为另一种格式。

Input_1: 02/01/21 11:00:00 AM
Input_2: 02/01/21  3:00:00 PM

Desired Output 1: 2021-02-01T11:00:00.000
Desired Output 2: 2021-02-01T15:00:00.000
fun date_time_format(d: LocalDateTime {format: "M/d/yy  h:mm:ss a"}) = d as String {format: "yyyy-MM-dd'T'HH:mm:ss.SSS"}

fun date_time_format2(d: LocalDateTime {format: "M/d/yyyy h:mm:ss a"}) = d as String {format: "yyyy-MM-dd'T'HH:mm:ss.SSS"}
concert_time: 
          try(() -> date_time_format(Input_1) )
          orElseTry(() -> date_time_format2(Input_1) )
          orElse null

使用 Input_1 时我的结果是 null 但使用 Input_2 时是 2021-02-01T15:00:00.000

问题是日期和时间之间的间距在输入中不是固定的,但在模式中是固定的。而是使用填充格式字符来解决问题。

我不喜欢这些函数似乎在使用格式进行隐式类型转换的方式。您实际上并没有传递 LocalDateTime,而是传递了一个字符串。这使得意图非常模糊。我怀疑这不是一个好习惯。我更改了示例以使用显式转换。如果您愿意,可以在调用函数之前将参数显式转换为 LocalDateTime。

fun date_time_format(d: String) = 
    (d as LocalDateTime {format: "M/d/yy pph:mm:ss a"}) 
        as String {format: "yyyy-MM-dd'T'HH:mm:ss.SSS"}

输出:

{
  "concert_time1": "2021-02-01T11:00:00.000",
  "concert_time2": "2021-02-01T15:00:00.000"
}