0

我正在使用 smack api 例如消息。我想用消息发送当前时间。所以我将当前时间设置为消息主题。然后在接收方获取那个时间。但问题是消息主题应该是字符串所以我在发送方将日期时间转换为字符串,然后在接收方再次从字符串转换为日期时间。我希望发送方的日期时间应该根据接收方的时区进行转换。我已经编写了如下代码,但我可以' t 将日期时间转换为接收方时区的日期时间。

//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);

我得到了一个输出

消息主题=> 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

实际接收方时间 => 2012 年 8 月 22 日星期三 06:39:56 MDT

编辑

实际上,我想将发送者的时间发送给接收者,并且在接收者端,应该根据接收者的时区进行转换。如上所述,接收者的实际时间与转换时间不同。所以,如果您有不同的代码,请在此处发布。

4

1 回答 1

0

使用普通的 long 来表示时间。(Long.toString(new Date().getTime())。它不包含(也不需要)任何 TZ 信息,因此更灵活。

于 2012-08-22T13:52:11.187 回答