我已經打了類似的問題,但它有總是了,因爲我已經返回日曆對象上使用的getTime(),然後使用它的日期格式。問題出在getTime()方法中。
如果您直接詢問Calendar對象,您可以完全按照Web服務發送它的方式獲取信息。
特別是在時區周圍,假設Calendar對象是c。
c.get(Calendar.ZONE_OFFSET)
會以毫秒爲單位獲取時區偏移量。然後,您可以隨意使用該值
下面是我用於我的情況的代碼,其中我需要將它重新取回到xsd:datetime格式的字符串中。毫無疑問,有更好的方法來編寫它,所以如果有人讀這個,並可以改進代碼,我會很感激。
public String calendarToXsdDateTimeString(Calendar c){
StringBuffer outputStringBuffer = new StringBuffer();
//2011-08-22T11:21:57
outputStringBuffer.append(c.get(Calendar.YEAR));
outputStringBuffer.append("-");
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.MONTH)+1));
outputStringBuffer.append("-");
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.DAY_OF_MONTH)));
outputStringBuffer.append("T");
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.HOUR_OF_DAY)));
outputStringBuffer.append(":");
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.MINUTE)));
outputStringBuffer.append(":");
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.SECOND)));
outputStringBuffer.append(getTimeZoneFromCalendar(c));
return outputStringBuffer.toString();
}
public String prefixZeroIfRequired(int value){
if(value<10 && value >=0){
return "0"+value;
}
else if(value <0 && value > -10){
String s = value+"";
String s1 = s.charAt(0)+"0"+s.charAt(1);
return s1;
}
else{
return ""+value;
}
}
private String getTimeZoneFromCalendar(Calendar c){
StringBuffer outputStringBuffer = new StringBuffer();
if(c.get(Calendar.ZONE_OFFSET) >= 0){
outputStringBuffer.append("+");
}
outputStringBuffer.append(prefixZeroIfRequired(c.get(Calendar.ZONE_OFFSET)/1000/60/60));
outputStringBuffer.append(":"+Math.abs(c.get(Calendar.ZONE_OFFSET)/1000/60)%60);
return outputStringBuffer.toString();
}
正是這種返回日曆對象它不斷擁有當地的時區。這導致我對軸如何進行轉換的猜測。來自webservice的XML具有事件發生的時區,但是當我檢查日曆對象軸時,它給我它只有本地時區。 – bittramp
@bitramp你如何獲得時區?如果您檢查上面的代碼,您會注意到我沒有使用getTimeZone(),我計算了ZONE_OffSET中的時區 –