【问题标题】:Groovy Timestamp conversion returning incorrect valuesGroovy 时间戳转换返回不正确的值
【发布时间】:2013-10-16 15:42:49
【问题描述】:

我正在尝试使用 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)

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

谢谢

【问题讨论】:

    标签: date groovy timestamp type-conversion


    【解决方案1】:

    因为日期格式应该是

    dd/MM/yyyy
    

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

    带有时间戳的实际格式是

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

    注意大写 M 表示月份,m 表示分钟。

    【讨论】:

    • 感谢您的回复。我会在早上测试它并投票等
    【解决方案2】:

    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 是一个月中的哪一天 - 你想要的那个。

    【讨论】:

    • 感谢文档链接。有用的
    猜你喜欢
    • 1970-01-01
    • 2018-12-07
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多