java中毫秒和SimpleDateFormat与JXDatepicker冲突

java中毫秒和SimpleDateFormat与JXDatepicker冲突,java,date,Java,Date,在我当前的项目中,我以毫秒为单位保存日期,如下所示: long f = jXDatePicker1.getDateInMillis(); //Data is saved in database. long firstDate = jXDatePicker1.getDateInMillis(); long secondDate = jXDatePicker2.getDateInMillis(); Calendar cal = Calendar.getInstance()

在我当前的项目中,我以毫秒为单位保存日期,如下所示:

  long f = jXDatePicker1.getDateInMillis();
  //Data is saved in database.
  long firstDate =  jXDatePicker1.getDateInMillis();
  long secondDate =  jXDatePicker2.getDateInMillis();

  Calendar cal = Calendar.getInstance();
  Calendar cal2 = Calendar.getInstance();

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int rows = model.getRowCount();
if (rows>0){
for(int i=0 ; i<rows; i++)
{model.removeRow(0);}}

String query = "SELECT CODE, AD_DATE, EX_DATE, PLAN_NAME, AMOUNT, DISCOUNT, TOTAL"
        + " FROM ADMISSION_MASTER WHERE AD_DATE>="+firstDate+" AND AD_DATE<="+secondDate+" ";

try{
    conn = new data.connection().db();
    stmtt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    rs = stmtt.executeQuery(query);
    while(rs.next()){
        long F = rs.getLong("AD_DATE"); cal.setTimeInMillis(F);
        long T = rs.getLong("EX_DATE"); cal2.setTimeInMillis(T);
        String frm = sdf.format(cal.getTime());
        String too = sdf.format(cal2.getTime());
        model.addRow (new Object[]{rs.getString(1), frm, too, rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7)});

    }}
 catch(SQLException ex){}
 finally{try{stmtt.close(); rs.close(); conn.close();}
 catch(SQLException ex){}
接下来,我将编写一个如下的查询:

  long f = jXDatePicker1.getDateInMillis();
  //Data is saved in database.
  long firstDate =  jXDatePicker1.getDateInMillis();
  long secondDate =  jXDatePicker2.getDateInMillis();

  Calendar cal = Calendar.getInstance();
  Calendar cal2 = Calendar.getInstance();

DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
int rows = model.getRowCount();
if (rows>0){
for(int i=0 ; i<rows; i++)
{model.removeRow(0);}}

String query = "SELECT CODE, AD_DATE, EX_DATE, PLAN_NAME, AMOUNT, DISCOUNT, TOTAL"
        + " FROM ADMISSION_MASTER WHERE AD_DATE>="+firstDate+" AND AD_DATE<="+secondDate+" ";

try{
    conn = new data.connection().db();
    stmtt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    rs = stmtt.executeQuery(query);
    while(rs.next()){
        long F = rs.getLong("AD_DATE"); cal.setTimeInMillis(F);
        long T = rs.getLong("EX_DATE"); cal2.setTimeInMillis(T);
        String frm = sdf.format(cal.getTime());
        String too = sdf.format(cal2.getTime());
        model.addRow (new Object[]{rs.getString(1), frm, too, rs.getString(4), rs.getString(5), rs.getString(6), rs.getString(7)});

    }}
 catch(SQLException ex){}
 finally{try{stmtt.close(); rs.close(); conn.close();}
 catch(SQLException ex){}
long firstDate=jXDatePicker1.getDateInMillis();
long secondDate=jXDatePicker2.getDateInMillis();
Calendar cal=Calendar.getInstance();
Calendar cal2=Calendar.getInstance();
DefaultTableModel=(DefaultTableModel)jTable1.getModel();
int rows=model.getRowCount();
如果(行数>0){

对于(int i=0;iWhat RDBMS(SQL风格)?AD_DATE的类型是什么?我们可以获得一些示例数据和预期结果吗?——这适用于所有RDBMS。您应该执行一个准备好的语句(您的查询目前仅因键入而不受SQL注入的影响)-这是事情的原理。“AD_DATE”是“BIGINT”。我使用的是Derby数据库。你需要给我们提供样本数据-很难从中看出哪里出了问题。为什么你不使用内置的日期/时间戳类型?从全球来看,一个太阳日大约有48小时长-你应该使用
日期
作为“日历日”吗,或“特定时间点”的
Timestamp
。获取以毫秒为单位的时间戳应给出一个绝对值;如果源和查询都使用一个时区,则无所谓。如果跨时区使用db,则db应以UTC为单位-您需要在该点进行调整。