【问题标题】:How to match system date with the date from database mysql如何将系统日期与数据库mysql中的日期匹配
【发布时间】:2014-11-15 07:17:42
【问题描述】:

我有一个使用 mysql 创建的名为 work 的数据库,其中创建了一个名为 register 的表。它包含一列更新日期。我像这样从 java swing 访问表

    conn=ConnectionDB.conn();
    Date d=sysdate();
    String sql="select renewdate from register";
    try
    {
        ps=conn.prepareStatement(sql);
        ResultSet rs=ps.executeQuery();
        Date dates;
        while(rs.next())
        {
            dates = rs.getDate("renewdate");
            System.out.println(dates);
            if(dates==d)
            {
               SendMailTLS.sendMail();
            }
        }
    }

我的问题是当更新日期等于系统日期时发送电子邮件。我使用函数 sysdate() 生成当前日期并将其分配给 d。还使用 dates = rs.getDate("renewdate") 将表中的更新日期分配给日期。 我的问题是我无法同时匹配 d 和日期,因此无法发送电子邮件。你能帮我如何匹配 d 和日期。 我试过 while(rs.next()) 从表寄存器中获取所有日期。但是使用 if(dates==d) 不能与 d 匹配。我也试过 if(rs.next()),但它只从表中获取第一个更新日期。那么如何检查 renewdate 的所有值并与当前发送消息的日期匹配

【问题讨论】:

  • 您是否检查过您的数据库日期格式是否与 sysdate() 相同?
  • 你的变量 d - java.util.Datejava.sql.Date 使用什么 Date 类?也许还向我们展示sysdate 方法。您是否只期望日期(没有时间信息)?
  • 永远不要使用 == 运算符比较两个对象的值。您正在做的是检查两个指针​​是否指向同一个对象。即使两个对象具有相同的值,也不意味着它们是相同的对象。使用 compareTo() 或 equals() 等方法。

标签: java mysql date


【解决方案1】:

只需将查询字符串更改为

// NOW() in mysql will get the current date and time. So here you get only renewdates matched with current date and time
String sql="select renewdate from register where renewdate = NOW()";

// If you want to compare only with date not time, then go with 
String sql="select renewdate from register where renewdate = CURDATE()";

上面的代码中不需要这个if(dates == d)。在您的 while 条件中有下一个元素时立即发送邮件。

【讨论】:

    【解决方案2】:

    不错的代码!所以:

    将日期的值保存为字符串,如:

    Date   d=sysdate();
    String strDate1 = d.toString();
    String strDate2 = rs.getDate("renewdate").toString;
    

    然后像这样比较:

    strDate1.equals(strDate2);
    

    由于字符串包含对“单词”的引用,而不是“单词”本身,因此 == 操作符会做其他事情;

    无论如何,请您将您的整个应用程序代码发送给我们,因为这将是一个很好的学习工作的平静?

    【讨论】:

    • 我用 netbeans 创建了一个摇摆页面。所以有很多系统生成的代码。您对哪一部分感兴趣?
    【解决方案3】:

    如果你想用代码来做,这里有一个方法:-

    使用以下代码将从数据库获取的日期转换为 java.util.Date 对象(假设日期存储在 GMT 中):

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date dateInDB = formatter.parse(dates);
    

    然后,您可以简单地使用java.util.Dateequals 方法将ddateInDB 进行比较。

    如果您想在比较两个日期时忽略时间部分,请为每个日期调用以下方法(将时间部分设置为 00:00:00)并在 equals 方法中使用返回的日期:

    public static Date getZeroTimeDate(Date dateWithTime) {
        Date res = dateWithTime;
        Calendar calendar = Calendar.getInstance();
    
        calendar.setTime( dateWithTime );
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
    
        res = calendar.getTime();
    
        return res;
    }
    

    这样它也不会使用任何不推荐使用的方法。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      相关资源
      最近更新 更多