过去一天我一直在尝试解决这个问题,但似乎找不到更优雅(Groovy 风格)的解决方案,希望有人能帮助我。
基本上我有一个列表,其中包含来自需要转换为指定时区(在本例中为巴黎 GMT+2)的外部源的时间戳 (GMT-0),然后将列表中的原始时间戳替换为纪元格式的新时间 (GMT+2)。
注意:我曾尝试使用 GregorianCalendar,但还没有弄清楚如何设置输入时区 (GMT-0),因此我可以将推算时间转换为任何时区。
这是我丑陋的解决方案:
def tStamp= ['2012-06-14T20:16:20Z', '2012-06-14T20:16:40Z', '2012-06-14T20:17:00Z', '2012-06-14T20:17:20Z '、'2012-06-14T20:17:40Z'、'2012-06-14T20:18:00Z'] println "分机:"+ tStamp tStamp = tStamp.collect { 7200+(new Date().parse("yyyy-MM-dd'T'HH:mm:ss'Z'", it).time.toString().toLong()/1000) .toInteger() } println "New: "+ tStamp 分机:[2012-06-14T20:16:20Z, 2012-06-14T20:16:40Z, 2012-06-14T20:17:00Z, 2012-06-14T20:17:20Z, 2012-06-14T20:17 :40Z, 2012-06-14T20:18:00Z] 新:[1339704980、1339705000、1339705020、1339705040、1339705060、1339705080]
新版本:
def timeStamps =['2012-06-18T09:11:00Z', '2012-06-18T09:11:20Z', '2012-06-18T09:11:40Z']
println "ORIG: "+ timeStamps
// Import the external time: GMT-0
def inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
inputFormat.timeZone = TimeZone.getTimeZone('GMT-0')
timeStamps = timeStamps.collect { inputFormat.parse(it) }
println "IN: "+ timeStamps
// Convert the timez to GMT+2 and conver to epoch
timeStamps = timeStamps.collect { def gcal = new GregorianCalendar(TimeZone.getTimeZone("GMT+2")); gcal.setTime(it); return gcal.getTimeInMillis()/1000 }
println "OUT: "+ timeStamps
ORIG: [2012-06-18T09:11:00Z, 2012-06-18T09:11:20Z, 2012-06-18T09:11:40Z]
IN: [Mon Jun 18 11:11:00 CEST 2012, Mon Jun 18 11:11:20 CEST 2012, Mon Jun 18 11:11:40 CEST 2012]
OUT: [1340010660, 1340010680, 1340010700]
有没有人有什么建议?
提前致以最诚挚的问候和感谢,
塞巴斯蒂安