在 Apache Camel 中以 UTC 格式格式化当前日期和时间

Arc*_*hie 7 apache-camel

我正在实现与需要当前日期和时间的外部服务的集成。该服务的文档说它接受 ISO 8601 格式的日期时间,但这只是部分正确 - 它不支持时区偏移。

当我${date:now:yyyy-MM-dd'T'HH:mm:ssZ}在 Camel 中尝试时,我得到2017-08-16T21:45:10+0200,这是服务不可接受的。

有没有办法让骆驼日期格式以UTC格式输出当前日期?我想得到2017-08-16T19:45:10Z而不是2017-08-16T21:45:10+0200.

我想避免为此编写单独的 bean,所以我更喜欢纯粹在 XML DSL 中实现的解决方案。

Arc*_*hie 6

我设法使用 Groovy 表达式提出了一个解决方案:

<groovy>
  java.time.ZonedDateTime.now(java.time.ZoneOffset.UTC)
      .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssX"))
</groovy>
Run Code Online (Sandbox Code Playgroud)


use*_*735 6

Camel Simple语言有date-with-timezone一个变量可以用来查询不同时区的时间,例如:

${date-with-timezone:now:CET:yyyy-MM-dd'T'HH:mm:ss}
${date-with-timezone:now:UTC:yyyy-MM-dd'T'HH:mm:ss}
${date-with-timezone:now:EST:yyyy-MM-dd'T'HH:mm:ss}
Run Code Online (Sandbox Code Playgroud)

那将变成:

2022-03-22T16:08:43 // CET is UTC+1
2022-03-22T15:08:43 // UTC
2022-03-22T10:08:43 // EST is UTC-5
Run Code Online (Sandbox Code Playgroud)

最后一个参数是java.text.SimpleDateFormat模式,您可以使用它来获取您想要的任何时区指示符。例如

${date-with-timezone:now:UTC:yyyy-MM-dd'T'HH:mm:ssX}
Run Code Online (Sandbox Code Playgroud)

给你:

2022-03-22T15:08:43Z
Run Code Online (Sandbox Code Playgroud)