我试图使用java.util.Date作为输入,然后用它创建查询-所以我需要一个java.sql.Date。

我惊讶地发现它不能隐式或显式地进行转换——但我甚至不知道如何做到这一点,因为Java API对我来说仍然相当新。


当前回答

我认为最好的转变方式是:

static java.sql.Timestamp SQLDateTime(Long utilDate) {
    return new java.sql.Timestamp(utilDate);
}

Date date = new Date();
java.sql.Timestamp dt = SQLDateTime(date.getTime());

如果你想在SQL表中插入dt变量,你可以这样做:

insert into table (expireAt) values ('"+dt+"');

其他回答

将java.util.Date转换为java.sql.Date将丢失小时、分钟和秒。所以如果可能的话,我建议你像这样使用java.sql.Timestamp:

prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime()));

要了解更多信息,您可以检查这个问题。

比较2个日期的方法。日期或sql.date)

 public static boolean isSameDay(Date a, Date b) {
    Calendar calA = new GregorianCalendar();
    calA.setTime(a);

    Calendar calB = new GregorianCalendar();
    calB.setTime(b);

    final int yearA = calA.get(Calendar.YEAR);
    final int monthA = calA.get(Calendar.MONTH);
    final int dayA = calA.get(Calendar.DAY_OF_YEAR);

    final int yearB = calB.get(Calendar.YEAR);
    final int monthB = calB.get(Calendar.MONTH);
    final int dayB = calB.get(Calendar.DAY_OF_YEAR);

    return yearA == yearB && monthA == monthB && dayA == dayB;
}

这个函数将返回一个从java日期对象转换而来的SQL日期。

public java.sql.Date convertJavaDateToSqlDate(java.util.Date date) {
    return new java.sql.Date(date.getTime());
}

我认为最好的转变方式是:

static java.sql.Timestamp SQLDateTime(Long utilDate) {
    return new java.sql.Timestamp(utilDate);
}

Date date = new Date();
java.sql.Timestamp dt = SQLDateTime(date.getTime());

如果你想在SQL表中插入dt变量,你可以这样做:

insert into table (expireAt) values ('"+dt+"');

如果你在Mysql中使用一个日期列,可以传递这个日期的字符串表示

所以我使用DateFormatter类格式化它,然后将它设置为sql语句或准备语句中的字符串

下面是代码说明:

private String converUtilDateToSqlDate(java.util.Date utilDate) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String sqlDate = sdf.format(utilDate);
    return sqlDate;
}

字符串日期= converUtilDateToSqlDate(otherTransaction.getTransDate());

//然后在SQL语句中传入此日期