【发布时间】:2011-12-15 17:06:29
【问题描述】:
我有一个工具,它似乎给了我日期,但没有指定我需要转换的年份,我正在使用 Java 来完成这项任务(实际上是 Groovy,但在这种情况下足够接近)。一个示例日期是“13 Dec 12:00:00”,它应该是指 2011 年 12 月 13 日,因为没有指定年份,它是 2011 年。下面的 Groovy 脚本可以解决问题:
import java.text.*
println new SimpleDateFormat("dd MMM HH:mm:ss").parse("13 Dec 12:00:00")
我对这个脚本的问题是 SimpleDateFormat 似乎在转换后将年份设置为 1970 年。我可以将其明确设置为 2011 年,因为那是当前年份,但当前年份和设置的日期之间似乎存在一些滞后,所以当新年到来时,这个脚本会因为滞后时间而出错。我怎样才能简单地修复它?一种解决方案是检查当前年份的日期是否在现在之后,然后使用去年,但我希望存在一个更简单的解决方案(或者说如果没有,那就是最简单的)。
【问题讨论】:
-
显然我并不清楚这个问题。我们的想法是将其设置为最近的一年,这样结果日期就不会在现在之后。假设您在 2012 年 2 月 1 日运行此脚本。在这种情况下,您希望返回日期为 2011 年 12 月 13 日,但如果您要求 2012 年 1 月 1 日,则返回日期为 1/1/ 2012.
-
看看我的编辑,这就是你想要的。
-
我推荐 Ole VV 的答案,然后根据 karakuricoder 的答案进行调整。
-
仅供参考,非常麻烦的旧日期时间类,例如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。