我正在尝试使用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)
所以我的问题是为什么这会返回奇怪的值,我需要更改什么来修复它?
由于
答案 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代表当月的那一天 - 你想要的那一天。