将GMT纪元转换为CST

时间:2011-05-02 19:34:30

标签: javascript timezone epoch gmt

我正在尝试将存储为纪元的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]”

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

对于初学者来说,toLocaleString()依赖于Locale,可能与您使用的格式不同(实际上是您无法控制的)。

其次,如果你知道CST时区偏移,你可以随时使用getTime()添加偏移并使用setTime()来转换。
在Java世界中,像java.util.TimeZone这样的东西可以在几毫秒内为你提供正确的偏移(使用getOffset())。