我需要弄清楚如何创建一个临时Calendar
对象(已经存在的“永久”日历的副本),以便我可以操作副本:tempCal.add(unit, value)
. 我需要保持原始日历对象不变,所以我真的不想add(unit, value)
直接调用它。
由于我创建副本的任何尝试都没有真正奏效,因此我目前的丑陋技巧是调用permanentCal.add(unit, value)
,显示所需的结果,然后调用permanentCal.add (unit, -value)
- 这看起来很不酷。
java.util.Calendar
有一个clone
方法,你可以使用它。它里面的所有数据都是由原语组成的,所以你不会遇到麻烦。
看看这些答案:
(不适用于安卓)
切换到 java 8 的不可变LocalDateTime,Calendar/Date 的继承者。这个 API 是一个巨大的改进,一开始可能有点不知所措。
有一种方法minusDays(long)
会返回一个新的日期。这使得线程安全和所有。例如,能够共享价值而不必担心有人改变它。
如果您想使用时间、日、月、周、年等进行计算,您可以使用timeInMillis
如下方式进行复制:
Calendar calendarCopy = Calendar.getInstance()
calendarCopy.setTimeInMillis(calendarOriginal.getTimeInMillis)
doSomethingWith(calendarCopy)
这样,您可以在副本中包含时间、日期、月份、星期、年份等。