使用JodaTime
,不使用'plus'或'minus'函数并使用最少行代码,如何在不修改时间的情况下设置新日期?
我的第一次尝试是使用DateTime
和int
等将getHoursOfDay()
的“时间”部分存储在单独的getMinutesOfHour()
中 - 然后创建一个新{{1}使用所需日期并再次设置小时,分钟和秒。但是这个方法非常笨重,我想知道是否有一个不那么冗长的方法来做到这一点 - 理想情况下只需要一行代码。
例如:
DateTime
>>>> 22/05/2013 13:40:02
答案 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)