2013-10-11 249 views
6

使用JodaTime,如果不使用「加號」或「減號」功能並使用最少的代碼行,如何設置新日期而不修改時間?修改日期而不修改時間

我第一次嘗試用getHoursOfDay()getMinutesOfHour()等存儲在單獨int S中的「時間」的DateTime的部分 - 然後創建一個新DateTime與所需的日期,然後再返回設定的小時,分​​鍾和秒。但是這種方法相當笨拙,我想知道是否有一個不那麼冗長的方法來完成這個 - 理想情況下只需一行代碼。

例如:

22/05/2013 13:40:02 >>>>30/08/2014 13:40:02

+0

我已經投票決定關閉爲主要基於輿論。解決問題的「最簡單」途徑是主觀的。如果你的意思是「*我不知道如何改變日/月/年,你能告訴我嗎?*」,然後編輯你的問題來說清楚。在這種情況下,請包括您的最大努力。 –

+2

'最簡單'變成'最簡單',這遠沒有主觀 –

+0

爲了澄清,我知道已經有幾種方法,但它們是冗長而笨重的。我期待着看看是否有人有真正的流水線方法。 –

回答

1

以前接受的答案被版主刪除,因爲它只包含javadoc的鏈接。 這裏是編輯版本。


你可以做這樣的

DateTime myDate = ... 
myDate.withDate(desiredYear, desiredMonth, desiredDayOfMonth); 

JavaDoc的是在這裏:DateTime.withDate(int year, int month, int dayOfMonth)

2

是JodaTime必須的?這樣做的基本方法是 1.從時間戳中提取時間。 2.將此添加到日期


long timestamp = System.currentTimeMillis(); //OK we have some timestamp 
long justTime = timestamp % 1000 * 60 * 60 * 24;// just tiem contains just time part 


long newTimestamp = getDateFromSomeSource();//now we have date from some source 
justNewDate = newTimestamp - (newTimestamp % 1000 * 60 * 60 * 24);//extract just date 

result = justNewDate + justTime; 

就像這樣。

+0

我之前解決這個問題的嘗試與您的建議一樣冗長,但是您使用完全意想不到的方法解決了問題,因此爲此+1了 –

+0

這不考慮夏令時。 – SpaceTrucker

1

使用withFields這樣的:

new DateTime().withFields(new LocalDate(2000,1,1)) 

這將設置DateTime那些包含在LocalDate的所有日期時間字段 - 年,月,日在此情況下。這可以與任何ReadablePartial實現一起使用,例如YearMonth