2013-04-13 41 views
1

比方说,我有一个乔达DateTime对象,通过以下方式 “MMM d,YYYY/HHMM”更新乔达DateTime对象

代表有没有办法更新日期时间“广告时段”或“部分时间“独立于两个字符串?

例如:

DateTime aDateTime initial : JAN 1, 1970/2230 

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

  • 我怎么能更新aDateTime一天只(获得1980年2月3日/ 2230) ?
  • 我该如何更新日期时间时间(获得JAN 1,1970/1520)?
+0

据我所知你不能。 DateTime是不可变的,所以你将不得不根据原始的DateTime对象创建一个新的对象 – RNJ

回答

3

乔达的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 

在最常见的情况下,具有不可变对象的可预见性比拥有一个可变实例的好处,所以我会建议采取第一种方式。