Groovy日期格式化为UTC时间并带毫秒

30

我在寻找一种好的方式来格式化一个带有UTC时间戳的字符串,格式为:yyyyMMdd-HH:mm:ss.<三位额外数字>

我没有找到任何代表毫秒或百分之一秒的字符,我甚至不确定能否解析这个格式。

理想情况下,我希望使用Date库中的parseToStringDate函数。

我的备选方案是将yyyyMMdd-HH:mm:ss转换为毫秒,然后将最后三个数字添加到该数字中。


2
我知道OP指定了格式,但其他人可能也对纪元时间System.currentTimeMillis())感兴趣。 - MarkHu
3个回答

54

使用 yyyyMMdd-HH:mm:ss.SSS 这个格式可以获得毫秒。

测试代码:

def now = new Date()
println now.format("yyyyMMdd-HH:mm:ss.SSS", TimeZone.getTimeZone('UTC'))

我尝试了 .SSS,但它没有起作用。我现在设置了时区,情况有所改善,但问题是我有一个字符串要解析成日期,但 parseToStringDate 给了我一个异常。你有什么想法可以从我的当前日期中导入并获取一个日期吗? - marko
嗨!现在.parse("yyyyMMdd-HH:mm:ss.SSS","20140104-11:00:01:001") 现在可以给我想要的结果,但是这个方法已经被弃用了! - marko
1
@marko 使用静态解析方法 Date.parse("yyyyMMdd-HH:mm:ss.SSS","20140104-11:00:01.001"),并记住毫秒是用 . 而不是 : 格式化的。 - dmahapatro
3
请注意,TimeZone.setDefault(...)可能会影响您的应用程序中其他部分的默认时区设置,您可能希望或不希望将UTC作为默认值!如果您需要本地化,请使用以下代码:now.format("yyyyMMdd-HH:mm:ss.SSS", TimeZone.getTimeZone('UTC')) - DarthPablo
格式似乎是“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”用于wss4j。 - Sofia Khwaja

1
我会这样转换它:

我会这样转换它:

def now = new Date()
println now.format("YYYYMMdd-HH:mm:ss") 

这里没有任何毫秒。 - Ievgen

1
你可以尝试这个:
TimeZone.getTimeZone('UTC')
Date date = new Date()
String newdate = date.format("YYYY-MM-dd HH:mm:ss.Ms")
log.info newdate

9
您从未使用TimeZone.getTimeZone('UTC')的结果,因此该行实际上没有任何作用。 - Baptiste Mathus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接