假设我有一个DateTime参考,我想在15:00获取前一天的时间。
如果我说

DateTime someTime = ....;
DateTime yesterday1500 = someTime.toDateMidnight().toDateTime().minusDays(1).plusHours(15);


然后,这将在所有日子都有效,除非有夏令时更改。
如果someTime ='1.4.2014',我会得到'31 .3.2014 15:00'。
如果someTime = '31 .3.2014',我会得到'30 .3.2014 16:00'。

我能想到的最好的是

yesterday1500 = new DateTime(someTime.getYear(), someTime.getMonthOfYear(), someTime.getDayOfMonth(), 15, 0, 0, 0);


它工作正常,但似乎笨拙。
有没有更好的办法?

编辑:
我在克罗地亚(CEST(UTC + 01:00)时区)。

编辑2:
在示例代码中添加了... toDateMidnight()。toDateTime()...以指示someTime可以在任何时间点

最佳答案

这很整洁:

DateTime dt = someTime.minusDays(1).withTime(15, 0, 0, 0);

10-06 05:13