datetime如何使用JodaTime在Java中设置时间属性
我想设定乔达时间中的小时、分钟和秒。但当我设置时,它不会改变属性
这是我的代码:
import org.joda.time.DateTime;
public class JodaAkbar
{
public static void main(String args[])
{
DateTime dt = new DateTime();
System.out.println("Before:"+dt);
dt.hourOfDay().setCopy(5);
dt.minuteOfDay().setCopy(20);
dt.secondOfDay().setCopy(0);
System.out.println("After:"+dt);
}
}
这是输出
Before:2015-04-01T11:01:38.277+11:00
After:2015-04-01T11:01:38.277+11:00
我得到了同样的结果。这里怎么了
编辑:
基本上,我想做一些类似的事情,如下面的代码所示。由于下面的代码在24小时格式下无法正常工作,我切换到了Joda Time
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 13);
cal.set(Calendar.MINUTE, 25);
cal.set(Calendar.SECOND, 0);
# 1 楼答案
研究不可变的数据结构。JodaTime对象上的修饰符并不真正修改对象,而是返回从原始对象构造的不同实例,并根据请求设置所需的字段
所以,实际上,你在构建很多项,而不是将它们分配给任何东西,所以它们会被垃圾收集。最后,将同一(不可变)项打印两次
# 2 楼答案
乔达时间对象是不可变的。
setCopy
中的“copy”一词告诉您,它不会直接设置这些字段,而是在修改该字段的情况下创建DateTime
的副本快速解决方法是:
更流畅的方法是将几个
with
方法链接在一起:或者只需一个
withTime
呼叫即可:顺便说一下,Java8引入了一个新的
java.time
包,它的灵感来自Joda Time。Joda Time网站建议,“从JavaSE8开始,用户被要求迁移到java.time
(JSR-310)。”