1

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

有没有办法独立于两个字符串更新 DateTime“日部分”或“时间部分”?

例如 :

DateTime aDateTime initial : JAN 1, 1970 / 2230

如果我有一个 StringaDayString="FEB 3, 1980"和一个 String aTimeString="1520"

  • 如何仅更新 aDateTime(以获得 1980 年 2 月 3 日 / 2230 年)?
  • 如何仅更新 aDateTime时间(以获得 1970 年 1 月 1 日/1520 年)?
4

1 回答 1

4

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

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

于 2013-04-13T10:45:46.087 回答