我已经打了类似的问题,但它有总是了,因为我已经返回日历对象上使用的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中的时区 –