在android中将日期时间从一个时区转换为另一个时区

时间:2012-08-22 13:36:34

标签: android timezone

我正在使用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);

我有一个像

这样的输出

讯息主题=> 8月22日星期三13:35:13 GMT + 00:00 2012

从字符串转换为日期=> 2012年8月22日星期三07:35:13 MDT 2012

设置接收器的时区=> 8月22日星期三06:35:13 GMT-07:00 2012

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

修改

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

1 个答案:

答案 0 :(得分:0)

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