2013-04-13 67 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 

在最常見的情況下,具有不可變對象的可預見性比擁有一個可變實例的好處,所以我會建議採取第一種方式。