gpt4 book ai didi

java - 为什么调用 get(int) 后 java.util.calendar 对象的值会发生变化

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:33 24 4
gpt4 key购买 nike

我正在尝试调试一些遗留代码中的问题。

我已将问题缩小为以下方法:

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();
}

调试第 2 行 cal 参数是 future 的日期。 (2015-01-06T00:00:00.000Z)

在使用第一个 cal.get( 执行第 3 行之后,cal 参数的值已更改(变为 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());

response.getStartDate() 返回一个 XMLGregorianCalendar

最佳答案

这是因为 get 的调用在宽松模式下对 Calendar 进行规范化,并在严格模式下对其进行验证:

returns the value of the given calendar field. In lenient mode, all calendar fields are normalized. In non-lenient mode, all calendar fields are validated and this method throws an exception if any calendar fields have out-of-range values. The normalization and validation are handled by the complete() method, which process is calendar system dependent.

看起来您的 Calendar 对象处于宽松模式,因此执行了规范化。规范化取决于日历实例。

关于java - 为什么调用 get(int) 后 java.util.calendar 对象的值会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27378818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com