【问题标题】:Unix timestamp conversion to ISO 8601 in a Groovy script在 Groovy 脚本中将 Unix 时间戳转换为 ISO 8601
【发布时间】:2022-01-11 10:47:20
【问题描述】:

我是 Groovy 的新手,我正在参与一个使用 Groovy 脚本的项目。我需要以Groovy script 将Unix 时间戳转换为ISO 8601 格式。我还没有找到一个简单明了的解决方案。

我现在有以下代码。

BigDecimal date = new BigDecimal('1641917151.819') //sample Unix timestamp
long date_int = (date.multiply(1000)).longValue()
def prov_time = new Date( date_int )
String iso_time = prov_time.format("MM/dd/yyyy'T'HH:mm:ss.SSS'Z'")
println(iso_time)

但是,当我在 Flowable Script Task 中尝试此操作时,会出现以下错误;

问题评估脚本:javax.script.ScriptException: groovy.lang.MissingMethodException:没有方法签名: java.util.Date.format() 适用于参数类型:(字符串) 值:[MM/dd/yyyy'T'HH:mm:ss.SSS'Z'] 可能的解决方案: 从(java.time.Instant),流(),getAt(java.lang.String), 解析(java.lang.String),打印(java.lang.Object), 打印(java.io.PrintWriter)

我的理解是 Groovy 上可能存在版本问题,它不再支持这种方法。 (因为当我在 Groovy 控制台上尝试这个时,我得到了预期的结果)。另外,我读到“日期”类型已经很老了,不再使用那么多了。因此,这里应该采取什么方法?

【问题讨论】:

  • 请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。
  • @cfrick 我更新了我尝试过的代码。

标签: groovy iso8601 flowable


【解决方案1】:

java.time.Instant 具有来自纪元时间戳的构建器,其字符串表示形式为 Zulu 的 ISO 8601:

java.time.Instant.ofEpochMilli((1641917151.819 * 1000).longValue()).toString()
// -> 2022-01-11T16:05:51.819Z

【讨论】:

  • 这正是我想要的。谢谢!
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 2013-03-11
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
相关资源
最近更新 更多