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

时间:2011-06-29 18:22:15

标签: java datetime jodatime

假设这是您在Joda time中获得当前时间的方式:

DateTime now = new DateTime();

如何计算变量dateTimeAtStartOfTodaydateTimeAtEndOfToday

的值

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

6 个答案:

答案 0 :(得分:35)

我会用:

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

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

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

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

答案 1 :(得分: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" );

JODA看起来非常深思熟虑。

答案 2 :(得分:1)

if((sinceDate.getDayOfYear() == now.getDayOfYear())  && (sinceDate.year() == now.year()))
   //yep, do something today;

适合我。

答案 3 :(得分:0)

import org.joda.time.DateTime;
import org.joda.time.DateTimeMidnight;

DateTime dateTimeAtStartOfToday = new DateTime(new DateTimeMidnight());  
DateTime dateTimeAtEndOfToday = new DateTime((new DateTimeMidnight()).plusDays(1));

答案 4 :(得分:0)

这有效......

DateTime dt = new DateTime();
DateMidnight dtStartDate = dt.toDateMidnight();
DateMidnight dtEndDate = dt.plusDays( 1 ).toDateMidnight();
System.out.println( dt + "\n" + dtStartDate + "\n" + dtEndDate );

...但就SQL而言,我倾向于使用BETWEEN作为where子句而不是使用&gt;和&lt; = stuff

答案 5 :(得分:0)

作为Kotlin扩展功能,它看起来像这样:

fun DateTime.isOnSameDay(timeOnDayToCheck: DateTime) =
  timeOnDayToCheck.toLocalDate().toInterval(this.zone).contains(this)

这不包含等于当天的 end 的时间(包括start),因此可以使用interval.getEnd().isEqual(this))添加“或” - case。