而输入开始时间(kssj)为8:00,结束时间(jssj)为6:00不能够保存成功;
代码如下:
if (kssj.compareTo(jssj) < 0){
//保存;
} else {
//报错:kssj应小于jssj;
}
结果却总是都能保存成功。是怎么回事呢?
13 个解决方案
#1
补充:kssj和jssj都是字符型的
#2
kssj.compareTo(jssj) < 0
默认应该是以字符串的自然顺序来比较的
8 在 1 的后面
8 同样在 6的后面
默认应该是以字符串的自然顺序来比较的
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;
}
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) {
///
}
}
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这种形式的。
DateFormat dd = new SimpleDateFormat ("yyyy-MM-dd hh:mm");
那你的kssj必须是:2003-04-05 8:00这种形式的。
#9
时间前后还是calendar类吧
#10
是。可是kssj = 8:00 ;jssj = 18:00,结果也是2啊。
#11
当然,1和6(两个首字母)都比8小,所以不会报错,建议特别写一个比较的函数
可以将时间转为int来比较
可以将时间转为int来比较
#12
字符串的比较是按顺序进行比较的(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
这样应该就可以了!
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
这样应该就可以了!
#13
有道理,主要是这是字符串,老当着一个整体了,忘记字符串比较的本质过程了
#1
补充:kssj和jssj都是字符型的
#2
kssj.compareTo(jssj) < 0
默认应该是以字符串的自然顺序来比较的
8 在 1 的后面
8 同样在 6的后面
默认应该是以字符串的自然顺序来比较的
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;
}
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) {
///
}
}
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这种形式的。
DateFormat dd = new SimpleDateFormat ("yyyy-MM-dd hh:mm");
那你的kssj必须是:2003-04-05 8:00这种形式的。
#9
时间前后还是calendar类吧
#10
是。可是kssj = 8:00 ;jssj = 18:00,结果也是2啊。
#11
当然,1和6(两个首字母)都比8小,所以不会报错,建议特别写一个比较的函数
可以将时间转为int来比较
可以将时间转为int来比较
#12
字符串的比较是按顺序进行比较的(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
这样应该就可以了!
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
这样应该就可以了!
#13
有道理,主要是这是字符串,老当着一个整体了,忘记字符串比较的本质过程了