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为单位-您需要在该点进行调整。