Groovy UTC日期格式

Cor*_*ley 7 javascript groovy

好的,所以我正在做一个简单的UTC日期格式化脚本,它接受UTC并将其转换为特定的日期和时间格式.我可以让脚本在javascript中正常工作,但我正在使用的插件显然需要Groovy.我不熟悉它,我被告知编程基本上与使用javascript库/语言相同.无论如何,这是我的代码片段:

import java.util.*;

var d = new Date();
var CurrentDay = ('0' + d.getUTCDate()).slice(-2);
var CurrentMonth = ('0' + d.getUTCMonth()).slice(-2);
var CurrentYear = d.getUTCFullYear();
var CurrentHours = ('0' + d.getUTCHours()).slice(-2);
var CurrentMinutes = ('0' + d.getUTCMinutes()).slice(-2);
var CurrentSeconds = ('0' + d.getUTCSeconds()).slice(-2);
var DateFormatted = CurrentYear.toString() + CurrentMonth.toString() + CurrentDay.toString() + CurrentHours.toString() + CurrentMinutes.toString() + CurrentSeconds.toString();
return DateFormatted;
Run Code Online (Sandbox Code Playgroud)

我尝试运行脚本时收到此错误消息:

groovy.lang.MissingMethodException: No signature of method: Script1.var() is applicable for argument types: (java.util.Date) values: [Thu Jun 06 21:18:43 CDT 2013]
Possible solutions: wait(), run(), run(), every(), any(), wait(long)
Parameters:
{}
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.此外,我可以让这个脚本完全按照我想要的正常javascript运行.

dma*_*tro 15

相当于varJavaScript 在Groovy中是"def".此外,使用Groovy Date在Groovy中设置日期格式更容易:

TimeZone.setDefault(TimeZone.getTimeZone('UTC'))
def now = new Date()
println now
println now.format("MM/dd/yyyy'T'HH:mm:ss.SSS'Z'")


//Prints:
Fri Jun 07 02:57:58 UTC 2013
06/07/2013T02:57:58.737Z
Run Code Online (Sandbox Code Playgroud)

您可以根据需要修改格式.有关可用格式,请参阅SimpleDateFormat.


Bas*_*que 7

tl;博士

此处为 Java 语法,但您也可以在 Groovy 中调用 java.time 类。

Instant.now()
       .toString()
Run Code Online (Sandbox Code Playgroud)

2017-01-23T01:23:45.987654321Z

避免遗留类

问题和其他答案使用麻烦的旧日期时间类,这些类现在是遗留的,被 java.time 类取代。

使用 java.time

显然,您想以标准ISO 8601格式生成一个字符串,表示UTC时区中的日期时间值。

本java.time.Instant类表示UTC时间线与纳秒的分辨率上一会儿。

Instant instant = Instant.now() ;
Run Code Online (Sandbox Code Playgroud)

java.time 类在解析/生成字符串时默认使用 ISO 8691 格式。

String output = instant.toString() ;
Run Code Online (Sandbox Code Playgroud)

2017-01-23T01:23:45.987654321Z

如果您想要整秒,没有分数,请截断。

Instant instant = Instant.now().truncatedTo( ChronoUnit.SECONDS ) ;
Run Code Online (Sandbox Code Playgroud)