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

Mor*_*ris 21 java datetime jodatime

假设这是你如何获得Joda时间的当前时间:

DateTime now = new DateTime();
Run Code Online (Sandbox Code Playgroud)

如何计算变量的值dateTimeAtStartOfTodaydateTimeAtEndOfToday

我正在试图做的是产生一些SQL做的有间发生的所有交易记录的查询startOfTodayendOfToday.

Jon*_*eet 35

我会用:

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

DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone());
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone());
Run Code Online (Sandbox Code Playgroud)

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

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


Bob*_*har 5

这样做效果更好,事实证明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" );
Run Code Online (Sandbox Code Playgroud)

JODA看起来非常深思熟虑.

  • 由于午夜问题,DateMidnight被[已弃用](http://www.joda.org/joda-time/apidocs/org/joda/time/DateMidnight.html).建议使用[withTimeAtStartOfDay](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay())方法 (6认同)