我正在尝试转换一个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”之前的时间,当我尝试转换时,它会崩溃:
1301382996000 -05-02 14:25:49,926http-8080-1sm702-适配器_转换脚本- Sysmodtime之前:1301382996000 2011-05-02 14:25:49,941http-8080-1sm702-适配器_转换脚本-调用函数convert org.apache.bsf.BSFException时出错: JavaScript错误: java.text.ParseException:无法解析的日期:"object JavaObject“
发布于 2011-05-03 06:09:22
假设您所说的“纪元”是指UNIX时间戳(从UNIX纪元开始的秒数),这种时间格式是时区不可知的。也就是说,您的时间戳不是UTC、GMT、CST或任何其他时区。这只是几秒钟而已。
当您将时间戳重新格式化为人类可读的内容时,您可以应用时区。在这种情况下,只需将其加载到Date对象中,并且应该使用您的本地时区。
发布于 2011-05-03 06:22:08
对于初学者来说,toLocaleString()依赖于语言环境,并且可能与您使用的格式不同(它实际上超出了您的控制范围)。
第二,如果你知道CST时区的偏移量,你可以使用getTime()加上偏移量,然后使用setTime()进行转换。
在Java的世界里,已经有像java.util.TimeZone这样的东西可以给你以毫秒为单位的正确偏移量(使用getOffset())。
https://stackoverflow.com/questions/5861595
复制相似问题