1

次のJavaコードで、1969年12月31日午後7時からの秒を日付/時刻に変換したいと考えています。

package sampProp;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.TimeZone;


public class sample 
{    
    public static void main(String args[])  
    {

     //Here 1373605580 is the number os secs from DEC 31ST 1969 7 PM
     long millisecs = (long)(1373605580) *1000;

     DateFormat df = new SimpleDateFormat("MM/dd/yyyy_HH:mm:ss a");

     df.setTimeZone(TimeZone.getTimeZone("EST"));

     Date d1 = new Date(millisecs);

     String formattedDate = df.format(d1); 

     System.out.println("Formatted date is "+formattedDate);

    } 
}

AIX サーバーでコードを実行しています。

開発サーバーは07/12/2013_00:06:20正しい値を提供しますが、実稼働サーバーは07/12/2013_01:06:20正しくない値を提供します。

これはどのように可能ですか。そして、どうすればこれを修正できますか。

私の開発サーバーのJavaバージョンの出力は次のとおりです。

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20071008 (SR6))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20071007 (JIT enabled)
J9VM - 20071004_14218_BHdSMr
JIT  - 20070820_1846ifx1_r8
GC   - 200708_10)
JCL  - 20071008

そして、私の本番サーバーの Java バージョンの出力は次のとおりです。

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pap64dev-20080315 (SR7))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 AIX ppc64-64 j9vmap6423-20080315 (JIT enabled)
J9VM - 20080314_17962_BHdSMr
JIT  - 20080130_0718ifx2_r8
GC   - 200802_08)
JCL  - 20080314
4

2 に答える 2

1

サーバーでタイムゾーンが正しく設定されていないためですか?

この質問と回答を確認してください: Java のタイムゾーンが正しくありません

開発サーバーと本番サーバーで JVM のタイムゾーンを確認してください。

編集

多くの人が言ったように:それはそれから来るべきではありませんが、それでも奇妙であり、2つのサーバー間で構成がかなり似ているように見えます(それでも:JVMは同じではありません)。違いがあるはずなので、JVM args とシステム変数を確認し、タイムゾーンを確認するのが最初の方法のようです。

再編集:

Davidが述べたように:それは時間の節約に関するバグです:

リンクは次のとおりです。 http://www.coderanch.com/t/458357/java/java/AIX-Timezone-Java-showing-hour

IBM からのリンク: http://www-01.ibm.com/support/docview.wss?uid=swg21250503

私は引用します:

2006 年に、Olson データベースで EST タイム ゾーン識別子の意味が変更されました。歴史的に、EST はアメリカ東部標準時を参照し、夏時間の調整を行いました。変更後、EST は夏時間調整なしの東部標準時を指します。元の EST 識別子と同じ意味を持つ新しい識別子 EST5EDT も導入されました。したがって、EST5EDT はアメリカ東部標準時を参照し、夏時間の調整を行います。

これらの問題を回避する最善の方法は、America/New_York のような長いタイム ゾーン識別子を使用することです。

長い時間帯 ID を使用するようにアプリケーションを変更できない場合は、システム・プロパティー ibm.dst.compatibility または sun.timezone.ids.oldmapping を設定して、EST または MST の解釈を変更できます。

于 2013-11-04T17:44:32.670 に答える