【现象】
例如,执行以下源代码时。
===============================================
// 1948/5/3(Mon) 00:00:00
var dateOrigin = new Date(1948, 4, 3, 0, 0, 0);
var dateString_1 = DatabaseManager.dateToString(dateOrigin);
var dateString_2 = dateOrigin.toString();
Debug.browse(dateOrigin, dateString_1, dateString_2);
===============================================
结果如下所示。
===============================================
1
Mon May 03 01:00:00 JDT 1948
Date
2
1948/05/03|01:00:00
String
3
Mon May 03 1948 00:00:00 GMT+0900 (JST)
String
===============================================
【对象版本】
AccelPlatform 所有更新版本
WebPlatform Ver.7.0
WebPlatform Ver.7.1
WebPlatform Ver.7.2
AppFramework Ver.7.0
AppFramework Ver.7.1
AppFramework Ver.7.2
【回答】
在脚本开发模式中,要处理表示夏令时的时间的情况下,有时不能正确执行JavaScript和Java之间的数据传输,以及,将Date实例转换到时间的字符串表示形式。
如果JavaScript的Date实例满足以下所有条件,则不能正确执行JavaScript和Java之间的数据传输,以及,将Date实例转换到时间的字符串表示形式。
(时间快一个小时)
[条件1] 1970年及以前或2038年及以后。
[条件2] ApplicationRuntime启动的JavaVM的默认时区在夏令时的期间内。
* ApplicationRuntime的时区为 JST(日本时间) 时
- “1948、1949、1950、1951年” 且“执行夏令时的月份”。
* ApplicationRuntime的时区为 JST (日本时间) 之外时
- “1970年及以前或2038年及以后” 且“执行夏令时的月份”。
另外,此现象是脚本开发模式引擎(Rhino)的设计(式样)引起的。
【规避方法】
通过在jvm参数中使用自定义时区,可以将夏令时指定为不可用的时区。
将时区设置为日本时间(JST)来运行的情况下,指定GMT+0900。
-Duser.timezone=GMT+0900
另外,在解决时请根据环境设置合适的时区偏移。
关于自定义时区,请参考JDK的API列表 java.util.TimeZone 。
WebPlatform的情况下
在ApplicationRuntime的 conf/imart.xml 的 “intra-mart/platform/java/server/command/option”中,请将自定义时区ID指定为Java-VM的系统属性“user.timezone”。
●时区为日本时间(JST)的情况下的设置例子
<option>-cp %SYSTEMCLASSPATH% -Xms%XMS% -Xmx%XMX% -XX:PermSize=128m -XX:MaxPermSize=128m -Djava.awt.headless=true -Duser.timezone=GMT+0900</option>
Accel Platform(Resin)的情况下
在Resin安装目录/conf/resin.properties 的 jvm_args中,请将自定义时区ID指定为Java-VM的系统属性“user.timezone”。
●时区为日本时间(JST)的情况下的设置例子
jvm_args : -Duser.timezone=GMT+0900 -Dfile.encoding=UTF-8 ... (后面部分省略)
-- 适用对象 ----------------------------------------------------------------
iAP/Accel Platform/所有更新版本
iWP/Web系统构建基础/WebPlatform/AppFramework
--------------------------------------------------------------------------------
FAQID:340
在WebPlatform/AppFramework 脚本开发模式中,有时“1948、1949、1950、1951年”的日期快1个小时。