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



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

DateTime now = new DateTime();

如何计算变量dateTimeAtStartOfTodaydateTimeAtEndOfToday的值?

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

我会使用:

LocalDate today = now.toLocalDate();
LocalDate tomorrow = today.plusDays(1);
DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone());
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone());

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

当然,这在一定程度上取决于数据库中存储的内容,以及您感兴趣的时区

这样做效果更好,事实证明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" );

乔达看起来是经过深思熟虑的。

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

适用于我。

import org.joda.time.DateTime;
import org.joda.time.DateTimeMidnight;
DateTime dateTimeAtStartOfToday = new DateTime(new DateTimeMidnight());  
DateTime dateTimeAtEndOfToday = new DateTime((new DateTimeMidnight()).plusDays(1));

这很有效。。。

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子句,而不是使用>和<=填充

作为Kotlin扩展函数,它看起来像这样:

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

这不包含等于一天的结束的时间(包括开始(,因此可能会在interval.getEnd().isEqual(this))中添加一个"或"大小写。

相关内容

  • 没有找到相关文章

最新更新