如何使用Java中的Joda日期/时间库获取“今天”的日期/时间范围?

2022-09-01 20:29:50

假设这是您以Joda时间获取当前时间的方式:

DateTime now = new DateTime();

如何计算变量和 ? 的值dateTimeAtStartOfTodaydateTimeAtEndOfToday

我试图做的是生成一些SQL来查找和之间发生的所有事务。startOfTodayendOfToday


答案 1

我会使用:

LocalDate today = now.toLocalDate();
LocalDate tomorrow = today.plusDays(1);

DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone());
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone());

然后检查是否有任何特定时间。startOfToday <= time < startOfTomorrow

当然,这部分取决于数据库中存储的内容 - 以及您感兴趣的时区。


答案 2

这效果更好,事实证明DateTime有一个名为toInterval的方法,它可以做到这一点(从午夜到午夜)。在我的测试中,DST 转换似乎没有问题。

DateTime now = new DateTime();
DateTime startOfToday = now.toDateMidnight().toInterval().getStart();
DateTime endOfToday = now.toDateMidnight().toInterval().getEnd();
System.out.println( "\n" + now + "\n" + startOfToday + "\n" + endOfToday + "\n" );

JODA看起来经过深思熟虑。