2012-03-19 9 views
0

2つのサーバーに2つのプログラムがあります。プログラムAは英国のサーバーに、プログラムBは米国のサーバーにあります。Javaでタイムゾーン変換を適用せずに2つの異なるタイムゾーン間でDateオブジェクトを渡す

プログラムAからプログラムBに日付オブジェクトを渡す必要があります。ただし、プログラムBから日付オブジェクトを取得すると、タイムゾーン変換で受信します。このタイムゾーンの変換を適用せずに、あるサーバーから別のサーバーに日付オブジェクトを渡すにはどうすればよいですか。

注:このことは、次のようにCalenderオブジェクトを通じて行うことができます。しかし、私の場合、Dateオブジェクトを使用したいと思います。プログラムBでは

:私はSerializableを実装しておりますので

Date checkInDate = new Date(cal1.get(Calendar.YEAR) - 1900 , cal1.get(Calendar.MONTH) , cal1.get(Calendar.DATE), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE), cal1.get(Calendar.SECOND)); 
Date checkOutDate = new Date(cal2.get(Calendar.YEAR) - 1900 , cal2.get(Calendar.MONTH) , cal2.get(Calendar.DATE), cal2.get(Calendar.HOUR_OF_DAY), cal2.get(Calendar.MINUTE), cal2.get(Calendar.SECOND)); 
+1

java.util.Calendarは日付を表すために使用され、日付の変換にもjava.util.Dateのメソッドのほとんどは廃止されています...なぜカレンダーを使いたくないのですか? – sachinrahulsourav

+1

java.util.Dateは絶対時刻です。タイムゾーンはありません。期待どおりに動作しないコードの例は、サーバー間でオブジェクトを渡すために使用しているメソッドについてのあなたの質問:)情報の理解に非常に役立ちます。 – Affe

+0

どのように日付を渡しますか?ウェブサービス? DBとJDBCを介して?他に何か?答えは各輸送とは異なるかもしれませんが、通常、転送前の「既知の」時間帯(GMT)に変換することは良い解決策です。さらに、なぜあなたはTZ変換を望んでいませんか? – ptyx

答えて

0

、私はあまりにも、次の方法を使用することができることを見出しました。

private void writeObject(ObjectOutputStream oos) throws IOException { 
    oos.defaultWriteObject(); 
    if (null != checkInDate) 
     oos.writeUTF(new java.text.SimpleDateFormat("yyyy-MMM-dd hh:mm").format(checkInDate)); 
} 

private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { 

    ois.defaultReadObject(); 
    try { 
     setCheckInDate(new java.text.SimpleDateFormat("yyyy-MMM-dd hh:mm").parse(ois.readUTF())); 
    } catch (ParseException e) { 

    } 
} 
1

あなたはエポック(1970年1月1日00:00:00 GMT)からのミリ秒数を与えるDate.getTime()を使用して、日付を直列化オフはるかに良いでしょう。これはある時点を完全に明白に参照しています。 Date(long date)コンストラクタを呼び出して、日付を再作成することができます。

+0

SimonCのアイデアをありがとうございました。 – namalfernandolk

+0

これは必須ではありません。 Dateがシリアル化されると、[その値を正確に書き出します](http://docs.oracle.com/javase/6/docs/api/serialized-form.html#java.util.Date)。ナマールは、「デート」という面倒な行動のせいではなく、何か間違っているので問題があります。 –

+0

@TomAnderson、あなたはまったく正しい、私は最初にそれをチェックしておくべきだった。 – SimonC

関連する問題