什么是复制joda LocalTime的直接方法?

时间:2011-05-15 04:57:56

标签: java jodatime

我想要一个副本的新实例。我可以从整数实例化,但似乎应该有一个更直接的方式。我也可以使用某种方法,如copy = original.minus(zero),但这也是间接的。

接受Java Object参数(我使用原始LocalTime)的LocalTime构造函数不起作用。我想它只是不支持它。

        LocalTime start = new LocalTime(9, 0, 0);
        LocalTime stop = new LocalTime(17, 0, 0);

        //LocalTime time = start.minusSeconds(0);  // GOOD VERSION
        LocalTime time = new LocalTime(start);     // THE BAD VERSION

        assert time == start: "does not work";

        // EXTRANEOUS STUFF TO JUSTIFY COPYING AN IMMUTABLE, FOLLOWS...
        while (time.compareTo(stop) <= 0)
        {
            //method(time, new LocalTime(9, 0, 0), stop); // MESSY
            method(time, start, stop);                    // NICER
            time = time.plusMinutes(1);
        }

我也尝试了copy = new LocalTime(original.getLocalMillis())但我无法访问getLocalMillis,因为它受到保护。

2 个答案:

答案 0 :(得分:8)

LocalTime是不可变的,因此没有必要保留具有相同值的2个实例。它们可以共享(甚至跨线程)。突变方法,例如加/减将返回一个新值,因此您可以在需要修改后的值“按需”创建副本。

LocalTime start = new LocalTime(9, 0, 0);
LocalTime stop = new LocalTime(17, 0, 0);
LocalTime time = start;     // Just use the reference

while (time.compareTo(stop) <= 0)
{
    method(time, start, stop);
    time = time.plusMinutes(1);
}

答案 1 :(得分:0)

这对我来说很好用:

LocalTime t1 = new LocalTime();
try {
   // Sleep for a bit just to make sure the current system time moves on
   Thread.sleep(5000);
} catch (InterruptedException e) { }
LocalTime t2 = new LocalTime(t1);
assertEquals(t1, t2);

注意倒数第二行 - 我认为这就是你要找的东西。 t2从纪元t1开始,以毫秒为单位获得相同的时间。

那么,当你说复制构造函数(我上面使用的OK)“不起作用”时,你的意思是什么?