[英]How to assign Calendar.add() result to a new Calendar object (in Java 7)?
我想在日期中添加一个月...
但我想在不更改原始日期的情况下将结果分配给新变量。 我想以标准方式执行此操作,这似乎是在使用 Calendar.add() 但该方法会更改用于计算的 Calendar 对象。
所以我想知道这里“正确”的做法是什么——我应该使用 Object.clone() 并转换回 Calendar 吗? 本能地,这似乎有点可怕和错误。 或者我应该使用如下语法从原始对象创建一个新的 Calendar 对象:
Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(originalCalendar.getTime());
看起来也很可怕......当然必须有一种更简单的方法 - 请有人告诉我我错过了什么!
(...但请不要告诉我使用 Joda Time 或 Java 8 - 由于项目限制,我不能。)
Calendar 不是一个漂亮的库,因此您不应该期望它如此。
据我所知,Java 8 将有一个基于 JodaTime 的新日期/时间库。 ;)
请不要告诉我使用 Joda Time - 由于项目限制我不能
在这种情况下,只需学会享受使用日历及其怪癖即可。
如果它可以帮助任何人或任何人有任何评论,我最终得到的代码是:
/**
* Get a new date/time by adding the specified number at the specified granularity
* (day/weeks/months etc.) to a date/time.
* @param dateTime
* Date/time to add to
* @param field
* The calendar field representing granularity (day/weeks/months etc.)
* @param amount
* Amount to be added
* @return A new date/time from performing the calculation
*/
public static Calendar add(final Calendar dateTime, final int field, final int amount) {
// Clone the date/time so the original one isn't changed
Calendar newDateTime = Calendar.getInstance();
Date dateTimeAsMillis = dateTime.getTime();
newDateTime.setTime(dateTimeAsMillis);
// Add the specified amount at the specified granularity
newDateTime.add(field, amount);
return newDateTime;
}
出什么问题了
Calendar resultCalendar = originalCalendar.clone(); // Or any other way of creating a copy
resultCalendar.add(...);
?
如果您不能使用 Joda-Time 并且仅限于标准日期/日历 API,那么我建议如下:
Calendar calendar = Calendar.getInstance();
Date originalDate = calendar.getTime();
calendar.add(Calendar.MONTH, 1);
Date newDate = calendar.getTime();
calendar.setTime(originalDate);
这将备份您当前日期,然后使用日历计算当前日期+ 1 个月,然后将原始设置恢复到日历。
如果你真的不想克隆一个新的日历对象,你可能会检索当前月份的天数,然后计算下个月需要多少时间。
这时候你可以 setTime(currentCalendar.getTime() + spanTime);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.