在Java中创建Calendar对象的临时副本
我需要弄清楚如何创建一个临时日历对象(已经存在的“永久”日历的副本),以便我可以操作副本:tempCal.add(unit,value)。 我需要保持原始日历对象不变,所以我真的不想直接调用add(unit,value)。
由于我创建副本的所有尝试都没有实际起作用,我当前的丑陋黑客是调用permanentCal.add(单位,值),显示所需的结果,然后调用permanentCal.add(unit,-value) – 看起来,酷。
java.util.Calendar
有一个clone
方法,你可以使用它。 其中的所有数据都是由原语组成的,因此您不会遇到麻烦。
看看这些答案:
- 日历的防御性副本
- 克隆GregorianCalendar的最快方法?
(不适用于Android)
切换到java 8的不可变LocalDateTime ,Calendar / Date的后继者。 这个API是一个巨大的改进,起初可能有点压倒性。
像minusDays(long)
这样的方法会返回一个新的日期。 这使得线程安全性和所有。 例如,能够共享一个值,而不用担心有人改变它。
乔达时间
如果您想以酷炫的方式执行此操作,请使用Joda-Time库。
这个非常成功的第三方开源日期时间框架为现在内置于Java 8及更高版本的java.time框架提供了灵感。