WebPlatform/AppFramework スクリプト開発モデルで「1948, 1949, 1950, 1951 年」の日付が、1時間ずれる場合があります。

 
【現象】
例えば、以下のソースを実行したとします。
===============================================
// 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時間ずれた日時になります)
[条件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

なお、対応時には環境に合わせて適切なタイムゾーンオフセットを設定してください。
カスタムタイムゾーンIDに関しては、JDKのAPIリスト java.util.TimeZone をご参照ください。

WebPlatformの場合

ApplicationRuntime の conf/imart.xml の「intra-mart/platform/java/server/command/option」にJava-VM のシステムプロパティ「user.timezone」に、カスタムタイムゾーンIDを指定してください。

●タイムゾーンが日本時間(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 に Java-VM のシステムプロパティ「user.timezone」に、カスタムタイムゾーンIDを指定してください。

●タイムゾーンが日本時間(JST)の場合の設定例
jvm_args : -Duser.timezone=GMT+0900 -Dfile.encoding=UTF-8   ... (後半は省略)

-- 対象 ------------------------------------------------------------------------
iAP/Accel Platform/全アップデート
iWP/Webシステム構築基盤/WebPlatform/AppFramework
--------------------------------------------------------------------------------



FAQID:340
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
Powered by Zendesk