0

我正在尝试将作为纪元存储的 GMT 时间转换为 CST。

下面是我在java中运行的当前代码。

        if (originalRFC.get("sysmodtime")!=null){    
        var sysmod = originalRFC.get("sysmodtime");                                 // Hold the sysmodtime value in a variable

        logger.debug('Sysmodtime Before: ' + sysmod);                               // Output to log before before converstion to CST - (in GMT)

        var format = new java.text.SimpleDateFormat("MMMM d, yyyy HH:mm:ss a z");   // Format the string will be in        
        var dateString = sysmod.toLocaleString();                                   // Convert the epoch to the string equivalent in CST 
        var parsedDate = format.parse(dateString);                                  // Convert that CST String back to epoch 
        var sysmodConvert = parsedDate.getTime();                                   // Convert it to time and milliseconds

        logger.debug('Sysmodtime After: ' + sysmodConvert);                                 //Output to log after conversion to CST

        genericRFC.setField("last-update-time",sysmodConvert);
}

查看日志中返回的以下错误,我们可以看到“1301382996000”之前的时间,当我尝试转换时它会中断:

2011-05-02 14:25:49,926 [http-8080-1] sm702-adapter_convert 脚本 - Sysmodtime 之前:1301382996000 2011-05-02 14:25:49,941 [http-8080-1] sm702-adapter_convert 脚本 - 错误时调用函数转换 org.apache.bsf.BSFException:JavaScript 错误:java.text.ParseException:无法解析的日期:“[object JavaObject]”

4

2 回答 2

0

假设“纪元”是指 UNIX 时间戳(自 UNIX 纪元以来的秒数),则此时间格式与时区无关。也就是说,您的时间戳不是 UTC、GMT、CST 或任何其他时区。这只是几秒钟。

当您将时间戳重新格式化为人类可读的内容时,您将应用时区。在这种情况下,只需将其加载到一个Date对象中,并且应该使用您的本地时区。

于 2011-05-02T22:09:22.003 回答
0

对于初学者, toLocaleString() 依赖于语言环境,并且可能与您使用的格式不同(它实际上超出了您的控制范围)。

其次,如果您知道 CST 时区偏移量,则始终可以使用getTime()添加偏移量并使用setTime()来进行转换。
在 Java 世界中,有类似 java.util.TimeZone 的东西可以getOffset()在几毫秒内为您提供正确的偏移量(使用)。

于 2011-05-02T22:22:07.800 回答