更新Joda DateTime对象

时间:2013-04-13 10:05:55

标签: java datetime jodatime

假设我有一个Joda DateTime对象,由以下模式表示 “MMM d,yyyy / HHmm”

有没有办法从两个字符串中独立更新DateTime“Day part”或“Time part”?

例如:

DateTime aDateTime initial : JAN 1, 1970 / 2230

如果我有一个字符串aDayString="FEB 3, 1980"和一个字符串aTimeString="1520"

  • 如何才能更新日期(获取FEB 3,1980 / 2230)?
  • 如何才能更新日期时间(获取JAN 1,1770 / 1520)?

1 个答案:

答案 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

在大多数常见情况下,拥有不可变对象的可预测性会超过拥有可变实例的好处,因此我建议采用第一种方法。