Groovy时间戳转换返回不正确的值

时间:2013-10-09 10:22:54

标签: date groovy timestamp type-conversion

我正在尝试使用Groovy将时间戳转换为格式为DD / MM / YYYY的日期

为此,我最初获取从数据库查询返回的Timestamp值。它的格式为:

YYYY-MM-DD HH:MM:SS.S (the .S is actually a milisecond I guess)

所以我创建了一个新变量并使用getTime()方法将其转换为miliseconds,如下所示:

def long myDate = theDate.getTime()

现在,我在这里得到的一些例子是:[添加了两个字段,以便您可以看到即时转换]

theDate (timeStamp)     myDate (time in milis)

1987-01-23 00:00:00.0 : 538358400000        
1959-08-26 00:00:00.0 : -326682000000       
1982-12-31 00:00:00.0 : 410140800000          

现在我尝试使用

格式创建DD / MM / YYYY格式的新日期
def dt = new Date(myDate)
dt = dt.format("DD/MM/YYYY")

这最终是我需要的,我得到以下值:

theDate (timeStamp)     myDate (time in milis)     new formatted date

1987-01-23 00:00:00.0 : 538358400000          :    23/01/1987  (Perfect)
1959-08-26 00:00:00.0 : -326682000000         :    238/08/1959 (Day is off)
1982-12-31 00:00:00.0 : 410140800000          :    365/12/1982 (Day is off)

所以我的问题是为什么这会返回奇怪的值,我需要更改什么来修复它?

由于

2 个答案:

答案 0 :(得分:1)

因为日期格式应为

dd/MM/yyyy

你得到负毫秒,因为毫秒是从1st Jan 1970的纪元计算出来的。在此之前的任何日期都将产生负的毫秒值。

带时间戳的实际格式为

yyyy/MM/dd HH:mm:ss.SSS

请注意月份M,以及m分钟。

答案 1 :(得分:1)

dmahapatro给出了正确的答案。看http://groovy.codehaus.org/groovy-jdk/java/util/Date.html#format%28java.lang.String%29指向http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html“日期和时间模式”,你会看到DD代表一年中的某一天,而dd代表当月的那一天 - 你想要的那一天。