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)
Wie hoch ist die Zeitzone der Quellzeit? – Rao
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) –
Zeitzone der Quelle ist GMT @Rao – activelearner