假设我有一个Joda DateTime对象,由以下模式表示 “MMM d,yyyy / HHmm”
有没有办法从两个字符串中独立更新DateTime“Day part”或“Time part”?
例如:
DateTime aDateTime initial : JAN 1, 1970 / 2230
如果我有一个字符串aDayString="FEB 3, 1980"
和一个字符串aTimeString="1520"
,
答案 0 :(得分:3)
Joda的DateTime
对象是不可变的,所以就像String
一样,当你改变一个值时,你得到一个新的实例。因此:
DateTime initial = new DateTime( 1970, 1, 1, 22, 30, 0 );
DateTime dayUpdated = initial.withDate( 1980, 2, 3 );
DateTime timeUpdated = initial.withTime( 15, 20, 0, 0 );
// At this point, initial still contains 1970-1-1, 22:30
// dayUpdated is 1980-2-3 22:30
// timeUpdated is 1970-1-1 15:20
如果要处理大量此类更改并希望减少垃圾收集器负载,可以使用MutableDateTime
创建一个可以直接修改的初始实例。
MutableDateTime mutable = new MutableDateTime( 1970, 1, 1, 22, 30, 0 );
mutable.setDate( 1980, 2, 3 );
mutable.setTime( 15, 20, 0, 0 );
// at this point, mutable contains 1980-2-3 15:20
在大多数常见情况下,拥有不可变对象的可预测性会超过拥有可变实例的好处,因此我建议采用第一种方法。