1

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

为此,我最初得到一个从数据库查询返回的时间戳值。它具有以下格式:

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

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

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)

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

谢谢

4

2 回答 2

1

因为日期格式应该是

dd/MM/yyyy

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

带有时间戳的实际格式是

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

M注意月份和m分钟的上限。

于 2013-10-09T12:18:11.700 回答
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 是一个月中的某一天 - 你想要的那个。

于 2013-10-09T12:20:51.727 回答