0

インスタンスメッセージにsmack apiを使用しています.メッセージで現在の時刻を送信したいので、現在の時刻をメッセージの件名として設定し、受信側でその時刻を取得します.しかし、問題はメッセージの件名が文字列でなければならないことです.そのため、送信者側で日時を文字列に変換し、受信者側で文字列から日時に再度変換します。送信者の日時を受信者のタイムゾーンに従って変換する必要があります。以下のようにコードを書きましたが、できます日時を受信者のタイムゾーンの日時に変換します。

//sender side
Calendar c = Calendar.getInstance(); 
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
String strdt= formatter.format(c.getTime());
message.setSubject(strdt);

受信側

TimeZone tz = TimeZone.getDefault();
String strzone=tz.getDisplayName(false, TimeZone.SHORT);
String str=message.getSubject();
Date expiry = null;
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
                 formatter.setTimeZone(TimeZone.getTimeZone(strzone));
        try { 
                expiry = formatter.parse(str);
                  }
          catch (Exception e) 
                {e.printStackTrace();}

SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
            df.setTimeZone(TimeZone.getTimeZone(strzone));  
String formattedDate1= df.format(expiry);  
Log.i("receiving time",formattedDate1);

私は次のような1つの出力を得ました

メッセージの件名 => 2012 年 8 月 22 日水曜日 13:35:13 GMT+00:00

文字列から日付への変換後 => Wed Aug 22 07:35:13 MDT 2012

受信機のタイムゾーンを設定した後 => Wed Aug 22 06:35:13 GMT-07:00 2012

実際の受信側時間 => Wed Aug 22 06:39:56 MDT 2012

編集

実際には、送信者の時間を受信者に送信したいのですが、受信者側では、受信者のタイムゾーンに従って変換する必要があります。上記のように、受信者の実際の時間は変換時間とは異なります。別のコードがある場合は、ここに投稿してください。

4

1 に答える 1

0

時間にはプレーンロングを使用してください。(Long.toString(new Date().getTime())). これには TZ 情報が含まれていない (必要もない) ため、より柔軟です。

于 2012-08-22T13:52:11.187 に答える