我试图调试一些遗留代码中的问题.
我已将问题缩小到以下方法:
public String formatDateTimeFromCalendar (Calendar cal){
StringBuffer sb = new StringBuffer();
String hr = ""+cal.get(Calendar.HOUR_OF_DAY);
sb.append(String.format("%02d", hr));
sb.append(":");
sb.append(String.format("%02d", cal.get(Calendar.MINUTE)));
sb.append( " on ");
sb.append(String.format("%02d", cal.get(Calendar.DAY_OF_MONTH)));
sb.append( "/");
sb.append(String.format("%02d", cal.get(Calendar.MONTH)+1));
sb.append( "/");
sb.append( cal.get(Calendar.YEAR));
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
调试第2行cal
参数是将来的日期.(2015-01-06T00:00:00.000Z)
与第一线3的执行之后cal.get(
的cal
PARAM的值已改变(到2014-12-12T00:00:00.000Z)
为什么/怎么会这样?
以下是创建日历的位置:
Calendar startDateAndTime = Calendar.getInstance();
startDateAndTime.setTime(response.getStartDate().toGregorianCalendar().getTime());
startDateAndTime.set(Calendar.HOUR_OF_DAY, response.getStartTime().getHour());
startDateAndTime.set(Calendar.MINUTE, response.getStartTime().getMinute());
startDateAndTime.set(Calendar.SECOND, response.getStartTime().getSecond());
startDateAndTime.set(Calendar.MILLISECOND, response.getStartTime().getMillisecond());
Run Code Online (Sandbox Code Playgroud)
response.getStartDate()
返回一个 XMLGregorianCalendar
这是因为调用在宽松模式下get
规范化Calendar
,并在严格模式下验证它:
返回给定日历字段的值。在宽松模式下,所有日历字段都会标准化。在非宽松模式下,将验证所有日历字段,如果任何日历字段的值超出范围,此方法将引发异常。规范化和验证由该
complete()
方法处理,该过程依赖于日历系统。
看起来您的Calendar
对象处于宽松模式,因此执行了规范化。规范化取决于日历实例。
归档时间: |
|
查看次数: |
771 次 |
最近记录: |