gpt4 book ai didi

java - 如何在 Play Framework 中使用 Ebean 比较日期?

转载 作者:行者123 更新时间:2023-12-02 06:32:19 25 4
gpt4 key购买 nike

Scenario.java:

package models;

import java.util.*;

import javax.persistence.*;

import play.db.ebean.*;

@Entity
public class Scenario extends Model {

@Id
public Long id;
public String name;
public boolean isPublic;
public boolean isAccepted;
public Date expirationDate;
@ManyToOne
public User owner;
@ManyToMany
public List<User> members = new ArrayList<User>();
@OneToMany(cascade = CascadeType.ALL)
public List<Checkpoint> checkpoints = new ArrayList<Checkpoint>();

public static Model.Finder<Long, Scenario> find =
new Finder<Long, Scenario>(Long.class, Scenario.class);

public Scenario(String name, boolean isPublic, Date expirationDate, User owner) {
this.name = name;
this.isPublic = isPublic;
this.expirationDate = expirationDate;
this.owner = owner;
this.isAccepted = false;
this.members.add(owner);
}

public static Scenario create(String name, boolean isPublic, Date expirationDate,
String owner) {
Scenario scenario = new Scenario(name, isPublic, expirationDate, User.find.ref(owner));
scenario.save();
scenario.saveManyToManyAssociations("members");
return scenario;
}

public static List<Scenario> findNotExpired(Date date) {
return find.where().or(
com.avaje.ebean.Expr.lt("expirationDate", date),
com.avaje.ebean.Expr.isNull("expirationDate")
).findList();
}
}

测试:

@Test
public void findScenariosNotExpired() {
new User("bob@gmail.com", "Bob", "secret").save();
new User("jane@gmail.com", "Jane", "secret").save();
SimpleDateFormat dt = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Scenario.create("Scenario 1", false, null, "bob@gmail.com");
try {
Scenario.create("Scenario 2", false, dt.parse("2013-12-12 00:00:00"), "jane@gmail.com");
Scenario.create("Scenario 3", false, dt.parse("2013-10-10 00:00:00"), "jane@gmail.com");
} catch (ParseException e) {
System.err.println("Problem with date parsing");
e.printStackTrace();
}

List<Scenario> results = Scenario.findNotExpired(new Date());
assertEquals(2, results.size());
}

测试结果:

[error] Test models.ModelsTest.findScenariosNotExpired failed: expected:<2> but was:<3>

在测试中,我通过了 new Date(),因为它应该包含今天的日期(2013 年 10 月 13 日)。这就是为什么我期望大小为 2(一个空值和一个今天之前的日期)。

我应该改变什么?我猜问题可能出在 com.avaje.ebean.Expr.lt("expirationDate", date) - 这样比较日期可以吗?

最佳答案

您需要使用MM而不是mm

使用

SimpleDateFormat dt = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

dt.parse("2013-12-12 00:00:00") evaluates to Sat Jan 12 00:00:00 EST 2013

dt.parse("2013-10-10 00:00:00") evaluates to Thu Jan 10 00:00:00 EST 2013

改为使用,

SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 

关于java - 如何在 Play Framework 中使用 Ebean 比较日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19957977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com