2017-11-21 6 views
0

ich einen Zeitstempel Zeichenfolge habe, wie folgt:Groovy - Konvertieren einen Zeitstempel Zeichenfolge in Millisekunden Epoch Zeit

String build_time=2017-11-20T21:27:03Z 

will ich es in Epoche Zeit in Millisekunden nach der PST-Zeitzone konvertieren, so dass mein Ergebnis ist :

long build_time_ms=1511299623000 

Wie kann ich das tun?

+0

Wie hoch ist die Zeitzone der Quellzeit? – Rao

+1

Was hast du probiert? Hast du es in Java versucht? (wenn Sie Java kennen ... der Grund, warum ich frage, ist, dass solche Lösungen problemlos zu Groovy migriert werden) –

+0

Zeitzone der Quelle ist GMT @Rao – activelearner

Antwort

2

Sie können dies mit Javas java.time.* Paket erreichen. Unten ist ein funktionierendes Skript und eine Ausgabe von groovy über Docker. Ich habe dies allerdings innerhalb Jenkins nicht versucht, und Skript erfordern entsprechende def Anweisungen hinzufügen Pipeline Serialisierung zu vermeiden, gibt

Script

import java.time.* 

// build time as string 
build_time='2017-11-20T21:27:03Z' 

// parse and get epoch 
time=Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", build_time) 

// get epoch milis 
epoch_milis = time.getTime() 

// create UTC local time 
local_dt = LocalDateTime.ofInstant(Instant.ofEpochMilli(epoch_milis), ZoneId.of('UTC')); 

// created zoned time out of UTC time 
zoned_dt = local_dt.atZone(ZoneId.of('America/Los_Angeles')) 

// get offset in milis 
offset_ms = zoned_dt.getOffset().getTotalSeconds() * 1000 

// add to UTC epoc 
local_timestamp = epoch_milis + offset_ms 

println "Time is ${local_timestamp}" 

Script-Ausgang, in groovy REPL läuft auch

$ docker run --rm -it groovy 
Nov 21, 2017 3:37:26 AM java.util.prefs.FileSystemPreferences$1 run 
INFO: Created user preferences directory. 
Groovy Shell (2.4.12, JVM: 1.8.0_141) 
Type ':help' or ':h' for help. 
---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
groovy:000> import java.time.* 
===> java.time.* 
groovy:000> 
groovy:000> // build time as string 
===> true 
groovy:000> build_time='2017-11-20T21:27:03Z' 
===> 2017-11-20T21:27:03Z 
groovy:000> 
groovy:000> // parse and get epoch 
===> true 
groovy:000> time=Date.parse("yyyy-MM-dd'T'HH:mm:ss'Z'", build_time) 
===> Mon Nov 20 21:27:03 UTC 2017 
groovy:000> 
groovy:000> // get epoch milis 
===> true 
groovy:000> epoch_milis = time.getTime() 
===> 1511213223000 
groovy:000> 
groovy:000> // create UTC local time 
===> true 
groovy:000> local_dt = LocalDateTime.ofInstant(Instant.ofEpochMilli(epoch_milis), ZoneId.of('UTC')); 
===> 2017-11-20T21:27:03 
groovy:000> 
groovy:000> // created zoned time out of UTC time 
===> true 
groovy:000> zoned_dt = local_dt.atZone(ZoneId.of('America/Los_Angeles')) 
===> 2017-11-20T21:27:03-08:00[America/Los_Angeles] 
groovy:000> 
groovy:000> // get offset in milis 
===> true 
groovy:000> offset_ms = zoned_dt.getOffset().getTotalSeconds() * 1000 
===> -28800000 
groovy:000> 
groovy:000> // add to UTC epoc 
===> true 
groovy:000> local_timestamp = epoch_milis + offset_ms 
===> 1511184423000 
groovy:000> 
groovy:000> println "Time is ${local_timestamp}" 
Time is 1511184423000 

In Ihrem Beispiel geben Sie das Ergebnis 1511299623000 ms, was 24 Stunden vor dem Zeitstempel zu sein scheint, und schauen Sie sich die JavaScript-Konsole mit den Eingaben Ihres Beispiels

an
new Date('2017-11-20T21:27:03Z') 
>> Tue Nov 21 2017 08:27:03 GMT+1100 (AEDT) 

new Date(1511299623000) 
>> Wed Nov 22 2017 08:27:03 GMT+1100 (AEDT) 
+0

Manchmal, wenn Sie den 'Import' nicht brauchen/wollen, dann versuchen Sie einfach' groovy - e "println neues Datum(). time/1000" ' – MarkHu

Verwandte Themen