calendar.getInstance() 或 calendar.clone()

2022-09-01 04:59:46

我需要制作给定日期的副本100次(我不能通过引用)。我想知道以下两个中哪一个是更好的选择

newTime=Calendar.getInstance().setTime(originalDate);

newTime=originalDate.clone();

性能是这里的主要内容。

感谢。


答案 1

我会用

newTime= (Calendar) originalDate.clone();

答案 2
  1. 我的直觉告诉我,clone()会更快。
  2. 为什么不尝试使用快速基准测试[*]呢?
  3. 如果不必执行日历计算,请考虑仅使用 长整型值。date.getTime()

[*]

private static final int N = 100000;

public static void main(final String[] args) throws Exception {

    final Date date = new Date();

    {
        final long start = System.currentTimeMillis();
        for (int i = 0; i < N; i ++) {
            final Date date2 = (Date) date.clone();
        }
        final long end = System.currentTimeMillis();
        System.out.println("Clone: " + (end - start) + " ms");
    }
    {
        final long start = System.currentTimeMillis();
        for (int i = 0; i < N; i ++) {
            final Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            final Date date2 = cal.getTime();
        }
        final long end = System.currentTimeMillis();
        System.out.println("Caldendar.setTime: " + (end - start) + " ms");
    }
}

结果:

Clone: 13 ms
Caldendar.setTime: 317 ms

PS 我不确定,如果你真的需要一个,或者一个,所以随时修改测试...CalendarDate

(回应评论:为了提高测试准确性,您还可以单独运行测试,增加N的值,...)


推荐