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 スクリプト - エラー呼び出し関数 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() は Locale に依存し、使用した形式とは異なる場合があります (実際には制御できません)。

Sencondly に、CST タイム ゾーン オフセットがわかっている場合は、いつでもgetTime()オフセットを追加して使用setTime()し、これを変換することができます。Java の世界では、すでにミリ秒単位で
適切なオフセット (使用) を与えることができる java.util.TimeZone のようなものがあります。getOffset()

于 2011-05-02T22:22:07.800 に答える