问题:使输入开始时间(kssj)为8:00,结束时间(jssj)为18:00能够保存成功;
      而输入开始时间(kssj)为8:00,结束时间(jssj)为6:00不能够保存成功;
代码如下:
    if (kssj.compareTo(jssj) < 0){
      //保存;
    } else {
      //报错:kssj应小于jssj;
    }
结果却总是都能保存成功。是怎么回事呢?

解决方案 »

  1.   

    补充:kssj和jssj都是字符型的
      

  2.   

    kssj.compareTo(jssj) < 0
    默认应该是以字符串的自然顺序来比较的
    8 在 1 的后面
    8 同样在 6的后面
      

  3.   

    我想也是这个原因。能不能限制一下格式呢?还是不能用compareTo来比较?
      

  4.   

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    Date ks= df.parse(kssj);
    Date js= df.parse(jssj);
      if (ks<js){ 
          //保存; 
        } else { 
          //报错:kssj应小于jssj; 
        } 
      

  5.   

    不行啊,提示:运行内部错误null
      

  6.   

    没问题啊,打印出2,楼主的代码来瞧瞧String kssj = "8:00";
            String jssj = "6:00";        if (kssj.compareTo(jssj) < 0) {
                System.out.print("1");
            } else {
                System.out.print("2");
            }
      

  7.   

    public DataTranVo Update(DataTran dt) throws Exception {
            conn = pool.getConnection();
            vo = new DataTranVo();
            cmd = new WdCommon();
            DateFormat dd = new SimpleDateFormat("yyyy-MM-dd hh:mm"); 
            Date ks = dd.parse(kssj);
            Date js = dd.parse(jssj);            String sql = "";
                String params[] = {};
                    try {
                        if (ks.compareTo(js) < 0){
                            boolean allowadd = cmd.AllowAdd("wd_wdmc",
                                    " and wdbm = '" + wdbm +
                                    "' and wdid !='" + pkid + "'");
                            if (allowadd) {
                                QueryRunner qr = new QueryRunner();
                                qr.update(conn, sql, params);
                                boolean issuccess = ///;
                                if (issuccess) {
                                    DbUtils.commitAndClose(conn);
                                    dt.sMessage = "成功!";
                                } else {
                                    DbUtils.rollbackAndClose(conn);
                                    dt.sMessage = "失败!";
                                }
                            } else {
                                dt.sMessage = "该单位已经存在代码为:" + wdbm +
                                              "的网点,请重新设置网点代码!";
                                DbUtils.close(conn);
                            }
                        } else {
                            dt.sMessage = "开始时间应小于结束时间!";
                            DbUtils.close(conn);
                        }
                        vo.setDataTran(dt);
                        return vo;
                    } catch (Exception e) {
                       ///
                    }
        }
      

  8.   

    你这样写肯定是异常呀。
    DateFormat dd = new SimpleDateFormat("yyyy-MM-dd hh:mm"); 
    那你的kssj必须是:2003-04-05 8:00这种形式的。
      

  9.   

    是。可是kssj = 8:00 ;jssj = 18:00,结果也是2啊。     
      

  10.   

    当然,1和6(两个首字母)都比8小,所以不会报错,建议特别写一个比较的函数
     可以将时间转为int来比较
      

  11.   

    字符串的比较是按顺序进行比较的(compareTo),比如:dsiejfg 和djifasln比较,会从左到右依次比较对应位置上的字母,为了更加明显的说明问题,我采用以下方式:
     1 2 3 4 5 6 7 8 9----序号
     d j i e j f g--------字符串一
     d j i f a s l n------字符串二
     0 0 0 -1       比较到第四位的时候,就不再往后比较了,后面的字符串大(其中的0代表相等,-1代表小于,1代表大于) 同理,比较8:00、6:00、18:00时,是按以下方式进行比较:
     1 2 3 4 5  
     8 :0 0
     6 :0 0
     1      因为8的ASCII码大于6,所以返回结果是大于
     1 2 3 4 5  
     8 :0 0
     1 8 :0 0
     1      因为8的ASCII码大于1,所以返回结果也是大于
     所以,我认为解决方法可以将字符串分解为两部分,以“:”为分割符分割,然后转化为整数进行比较
     如:
     public class ZFBJ {
       public static void main(String args[])
       {
       String a="8:00";
       String b="6:00";
       String c="18:00";
       
       String[] a1=a.split(":");
       String[] b1=b.split(":");
       String[] c1=c.split(":");
       
       int a2=Integer.parseInt(a1[0]);
       int b2=Integer.parseInt(b1[0]);
       int c2=Integer.parseInt(c1[0]);
      
       if(a2>b2)
       {
       System.out.println("8:00大于6:00");
       }
       else
       {
       System.out.println("8:00小于6:00");
       }
       if(a2>c2)
       {
       System.out.println("8:00大于18:00");
       }
       else
       {
       System.out.println("8:00小于18:00");
       }
       }
    }
     
    结果:8:00大于6:00
         8:00小于18:00
    这样应该就可以了!