我正在尝试使用ZonedDateTime.now(ZoneOffset.UTC).toString()来获取当前时间.它运行良好,但似乎在它们正好翻转(00.000Z)时切断秒/毫秒,或者它出现.通常它没关系,但我正在将数据写入ElasticSearch,它对我传递的日期(获取时间)有严格的映射.
我可能正在思考正在发生的事情,但我想确保我总能提供秒和毫秒的日期/时间.
基本代码片段(第一遍是添加毫秒,但是也可能省略秒数):
def utcDate = ZonedDateTime.now(ZoneOffset.UTC)
def utcDateStr = utcDate.toString()
utcDateStr = utcDateStr.contains(".") ? utcDateStr
: utcDateStr.replace("Z","").concat(".000Z")
Run Code Online (Sandbox Code Playgroud)
希望它采用以下格式,几乎总是如下:
2016-06-16T05:43:07.624Z
Run Code Online (Sandbox Code Playgroud)
首先,听起来你真的想要一个Instant
而不是一个ZonedDateTime
- 它将时区部分完全取出.但无论哪种方式,只需使用a DateTimeFormatter
格式化您想要的值.
听起来你想要的东西(在Java中;适当地调整到Groovy):
DateTimeFormatter formatter = DateTimeFormatter
.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US)
.withZone(ZoneOffset.UTC);
Instant now = Instant.now();
String text = formatter.format(now);
System.out.println(text);
Run Code Online (Sandbox Code Playgroud)
即使它为0,它仍将输出毫秒值.
(如果你真的想使用ZonedDateTime
,你可以使用相同的格式化程序.但从概念上讲,我认为你想要代表的只是一个瞬间,并且Instant
更适合它.)
归档时间: |
|
查看次数: |
474 次 |
最近记录: |