6

使用JodaTime,不使用“加号”或“减号”函数,使用最少的代码行,如何在不修改时间的情况下设置新日期?

我的第一次尝试是使用等存储单独的“DateTime时间”部分- 然后使用所需的日期创建一个新的,并再次设置小时、分钟和秒。但是这种方法非常笨拙,我想知道是否有一种不那么冗长的方法可以做到这一点——最好只用一行代码。intgetHoursOfDay()getMinutesOfHour()DateTime

例如:

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

4

3 回答 3

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; 

像这样的东西。

于 2013-10-11T10:33:24.940 回答
1

像这样使用withFields

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

在这种情况下,这会将 的所有日期时间字段设置DateTime为包含在LocalDate- 年、月和日中的那些。这将适用于任何ReadablePartial实现YearMonth,例如。

于 2013-10-22T10:34:23.830 回答
1

以前接受的答案已被版主删除,因为它仅包含指向 javadoc 的链接。这里是编辑版本。


你可以这样做

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

JavaDoc 在这里:DateTime.withDate(int year, int month, int dayOfMonth)

于 2013-10-24T14:28:38.920 回答