7

我需要弄清楚如何创建一个临时Calendar对象(已经存在的“永久”日历的副本),以便我可以操作副本:tempCal.add(unit, value). 我需要保持原始日历对象不变,所以我真的不想add(unit, value)直接调用它。

由于我创建副本的任何尝试都没有真正奏效,因此我目前的丑陋技巧是调用permanentCal.add(unit, value),显示所需的结果,然后调用permanentCal.add (unit, -value)- 这看起来很不酷。

4

5 回答 5

18

java.util.Calendar有一个clone方法,你可以使用它。它里面的所有数据都是由原语组成的,所以你不会遇到麻烦。

看看这些答案:

于 2013-05-21T20:38:07.260 回答
2

(不适用于安卓)

切换到 java 8 的不可变LocalDateTime,Calendar/Date 的继承者。这个 API 是一个巨大的改进,一开始可能有点不知所措。

有一种方法minusDays(long)会返回一个的日期。这使得线程安全和所有。例如,能够共享价值而不必担心有人改变它。

于 2015-10-02T16:56:37.103 回答
2
于 2019-11-21T03:07:55.337 回答
2

如果您想使用时间、日、月、周、年等进行计算,您可以使用timeInMillis如下方式进行复制:

Calendar calendarCopy = Calendar.getInstance()
calendarCopy.setTimeInMillis(calendarOriginal.getTimeInMillis)
doSomethingWith(calendarCopy)

这样,您可以在副本中包含时间、日期、月份、星期、年份等。

于 2019-11-20T19:30:46.747 回答
1

乔达时间

如果您想以很酷的方式执行此操作,请使用Joda-Time库。

这个非常成功的第三方开源日期时间框架为现在内置于 Java 8 及更高版本的java.time框架提供了灵感。

于 2013-05-21T20:39:32.157 回答