java - Date.plus 在 2.5.4 Groovy Runtime 中不起作用,有什么替代方法?

标签 java date groovy

我们想为当前日期添加天数并以特定方式对其进行格式化。这是在 Groovy 2.4.13 中解决的,以下日期操作工作正常:

​today = new Date()+90;today.format('yyyy-MM-dd HH:mm:ss.S');

结果:2019-12-02 08:07:15.294

在 Groovy 2.5.4 中,相同的表达式会引发此异常:

groovy.lang.MissingMethodException: No signature of method: java.util.Date.plus() is applicable for argument types: (Integer) values: [90] Possible solutions: parse(java.lang.String), split(groovy.lang.Closure), use([Ljava.lang.Object;), is(java.lang.Object), wait(), clone() at Script1.run(Script1.groovy:3)



我能够在线在“Groovy 沙箱”中重现此行为:

在这里工作正常:groovy-playground(版本 2.4.1.5)
此处失败:groovyconsole(版本 2.5.7)

在这种情况下,工作的替代方案是什么?我已经阅读了一个新的 Date API,但找不到有关如何使用它的详细信息,以及日期操作(例如 + 90 天)。

最佳答案

我同意 Ole V.V. 关于使用新日期/时间 API 的建议。以下是您将如何以更加 Groovy 的风格编写他的 Java 示例。

// you can assemble aggregate types by left shifting the aggregates
// I'm not endorsing this approach, necessarily, just pointing it out as an alternative 
ZonedDateTime now = LocalDate.now() << LocalTime.now() << ZoneId.of('Africa/Bamako')

// the plus operator is overloaded
ZonedDateTime in90Days = now + 90

// you can pass a String to format without needed a full DateTimeFormatter instance
println in90Days.format('uuuu-MM-dd HH:mm:ss.S')

关于java - Date.plus 在 2.5.4 Groovy Runtime 中不起作用,有什么替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58214893/

相关文章:

java - 创建 Java 定时器和 TimerTask?

java - 验证请求参数中的日期(ISO-8601)(spring-boot)

java - 如何在android中将毫秒转换为日期格式?

gradle - Gradle插件依赖项(NoClassDefFoundError)

shell - 将 groovy 变量传递给 shell 脚本

java - Project Reactor 是 java 的 CompletableFuture 的包装器吗?

使用多线程搜索数组时的 Java 锁/并发问题

java - 使用正则表达式替换不在括号中的逗号

javascript - 将日期转换为 Oracle 日期格式时打印回溯日期

groovy - 输出我的作业正在运行的 Jenkins 作业的控制台文本