当前位置: 首页 > 知识库问答 >
问题:

计算JPA中两个日期之间的天数

漆雕育
2023-03-14

我需要计算JPA中2个日期之间的天数。

例如:

CriteriaBuilder.construct(
  MyCustomBean.class
  myBean.get(MyBean_.beginDate), //Expression<Date>
  myBean.get(MyBean_.endDate), //Expression<Date>
  myDiffExpr(myBean) //How to write this expression from the 2 Expression<Date>?
);

到目前为止,我试着:

public class MyDialect extends PostgreSQL82Dialect {

  public MyDialect() {
    super();
    registerFunction("datediff", 
    //In PostgreSQL, date2 - date1 returns the number of days between them.
    new SQLFunctionTemplate(StandardBasicTypes.LONG, " (?2 - ?1) "));
  }
}

你会怎么做?

共有1个答案

贺浩漫
2023-03-14

看起来您正在寻找一个使用JPQL执行查询的解决方案,如select p FROM Period p WHERE datediff(p.to,p.FROM)>10

恐怕JPQL中没有这样的功能,所以我建议使用本机SQL。如果使用Hibernate的SQLFunctionTemplate扩展方言,您的想法非常聪明。我宁愿将其更改为使用date_part('day',end-start),因为这是使用PostgreSQL实现日期之间天数差异的方法。

您还可以在PostgreSQL中定义函数,并将其与条件function()一起使用。

'CREATE OR REPLACE FUNCTION "datediff"(TIMESTAMP,TIMESTAMP) RETURNS integer AS \'DATE_PART('day', $1 - $2);\' LANGUAGE sql;'

cb.function("datediff", Integer.class, end, start);
 类似资料:
  • 问题内容: 我编写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别是2/3/2017和3/3/2017时,显示的天数是29.尽管它们是同一天,但显示的是1.(请假的天数。如果请假一天,他必须选择相同的开始日期和结束日期。因此,在这种情况下,他请了两天假。 我究竟做错了什么?感谢您的时间。 注意:请不要使用日期构造函数。检查下面接受的答案。使用simpledateformat或Joda时

  • 我写了以下代码来查找两个日期之间的日期 当开始日期和结束日期分别为2017年2月3日和2017年3月3日时,显示的天数为29天。虽然当他们在同一天,它是显示1。(一个人休假的天数。因此,如果一个人休假一天,他必须选择相同的开始和结束日期。因此,在这种情况下,他休假两天)。 我做错了什么?谢谢你抽出时间。 注意:请不要使用日期构造函数。检查下面被接受的答案。使用simpledateformat或Jo

  • 问题 你需要找出两个日期间隔了几年,几个月,几天,几个小时,几分钟,几秒。 解决方案 利用 JavaScript 的日期计算函数 getTime() 。它提供了从 1970 年 1 月 1 日开始经过了多少毫秒。 DAY = 1000 * 60 * 60 * 24 d1 = new Date('02/01/2011') d2 = new Date('02/06/2011') days_pas

  • 防止日期保存时间出错 输入是两个对象(没有时间,我知道,但我需要使用实例来实现这一点)

  • 问题内容: 我正在计算从“开始”到“结束”日期之间的天数。例如,如果起始日期为2010年4月13日,起始日期为2010年5月15日,则结果应为 如何使用JavaScript获得结果? 问题答案:

  • 问题内容: 我有两个输入日期来自Date Picker控件。我选择了开始日期2/2/2012和结束日期2/7/2012。我为此编写了以下代码。 我应该得到6的结果,但是我却得到5。 谁能告诉我如何获得确切的区别? 问题答案: 从Moment文档: 或包含起点: 避免手动打乱时间戳和时区。 根据您的特定用例,您可以 使用和/或强制diff在“端点”处包含或排除(如@kotpal在评论中所建议)。 设