修改日期而不修改时间

时间:2013-10-11 10:21:20

标签: java jodatime

使用JodaTime,不使用'plus'或'minus'函数并使用最少行代码,如何在不修改时间的情况下设置新日期?

我的第一次尝试是使用DateTimeint等将getHoursOfDay()的“时间”部分存储在单独的getMinutesOfHour()中 - 然后创建一个新{{1}使用所需日期并再次设置小时,分钟和秒。但是这个方法非常笨重,我想知道是否有一个不那么冗长的方法来做到这一点 - 理想情况下只需要一行代码。

例如:

DateTime>>>> 22/05/2013 13:40:02

3 个答案:

答案 0 :(得分: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; 

像这样。

答案 1 :(得分:1)

像这样使用withFields

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

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

答案 2 :(得分:1)

以前接受的答案已由主持人删除,因为它只包含指向javadoc的链接。 这是编辑版。


你可以这样做

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

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