如何用java判断一个字符串符合oracle中的date类型 在insert语句中,对于date类型的字符串,发现"2008 12 12","2008/1212","200812/12"这样的也能插入,但是"081212"这样的就不行。我现在想用java去判断一个字符串是否符合oracle中的date类型,不用执行sql语句的方式,请教高手该如何来判断? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接在执行完语句之后写个Exception就可以了,如: EXCEPTION WHEN OTHERS THEN null; 这样,就会继续执行下面该执行的动作 我说的是在java程序中,不是在pl/sql中,另外在java中不用insert之类的sql语句,用纯粹的java逻辑判断 很简单,如果在java中,date可以通过string new出来,同时可以设置date的格式,所以,很简单,只要能new出来,就OK。 6楼的 对于“2008/1212”这个字符串在oracle中用insert语句可以正常插入的,是合法的日期,但是你用java去new能new出来吗。哪有那么简单阿 private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); public static Date parse(String datestr) { if (datestr == null) { return null; } datestr = datestr.replaceAll(" ",""); // 去掉空格 datestr = datestr.replaceAll("/", ""); // 替换/ datestr = datestr.replaceAll("-", ""); // 替换- datestr = datestr.replaceAll("\\.", ""); // 替换. try { return dateFormat.parse(datestr); } catch (Exception ex) { return null; } }支持200802012008-02-012008.02.012008/02/012008 02 01等 加入包import java.text.SimpleDateFormat;import java.util.Date;然后就可以进行操作,如:Date dt = new Date();SimpleDateFormat smpDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sTime = smpDateFormat.format(dt);根据("yyyy-MM-dd HH:mm:ss")就可以确定格式,2008/1212这样的应该也可以。 oracle中的date类型好像除了字母和数字都可以做分割符,比如2008!12!12 2008#12#12 都是可以插入到数据库中的,如果按照老紫竹的做法可就麻烦了,不知道有没有更好的办法啊,竹子!另外对于.为什么要转译阿,不是很明白这个,麻烦竹子解释下 楼主啊! 人都分不清楚,你还让机器去区分啊!干脆你用正则表达式算了。String str = "2000-02-01"; System.out.println(str.matches("^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$")); SimpleDateFormat sim=new SimpleDateFormat("dd-MM月-yyyy");try { String s="日期字符串"; Date date=sim.parse(s); } catch (Exception e) { e.printStackTrace(); }如果没有异常的话,那么s就是Oracle日期类型,否则就不是的。 你在sql语句中直接把字形串转成date类型,最好加格式化 private boolean dealwith(String s){ try{ Date date = new Date(s); return true; }catch(Exception ex){ return false; }} 更详细的正则表达式验证日期的内容,请看这里http://www.java2000.net/viewthread.jsp?tid=471 按照楼主的要求,要做到这个的话,你必须先知道oracle支持的所有日期格式,否则别的就别谈了 我自己写的一个方法,如果有不对之处还请各位大虾指正: private boolean checkDateType(String date) { //2008/12/12 String pattern1 = "^[\\d]{1,4}([\\D|\\W]{1}[\\d]{1,2}){2}$"; //2008/1212 String pattern2 = "^[\\d]{1,4}[\\D|\\W]{1}[\\d]{4}$"; //200812/12 String pattern3 = "^[\\d]{6}[\\D|\\W]{1}[\\d]{1,2}$"; //20081212 String pattern4 = "^[\\d]{8}$"; if (date.matches(pattern1)) { String[] ymd = date.split("[\\D|\\W]"); Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1, Integer.parseInt(ymd[2])); calendar.setLenient(false); try { calendar.get(Calendar.YEAR); return true; } catch (Exception e) { return false; } } else if (date.matches(pattern2)) { String[] ymd = date.split("[\\D|\\W]"); Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1].substring(0, 2)) - 1, Integer.parseInt(ymd[1].substring(2))); calendar.setLenient(false); try { calendar.get(Calendar.YEAR); return true; } catch (Exception e) { return false; } } else if (date.matches(pattern3)) { String[] ymd = date.split("[\\D|\\W]"); Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0].substring(0, 4)), Integer.parseInt(ymd[0].substring(4)) - 1, Integer.parseInt(ymd[1])); calendar.setLenient(false); try { calendar.get(Calendar.YEAR); return true; } catch (Exception e) { return false; } } else if (date.matches(pattern4)) { Calendar calendar = new GregorianCalendar(Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(4, 6)) - 1, Integer.parseInt(date.substring(6))); calendar.setLenient(false); try { calendar.get(Calendar.YEAR); return true; } catch (Exception e) { return false; } } else { return false; } } 关于构造器 求一个SQL语句 JNA对窗口透明化的用法问题 如何获得spring中配置的datasource? mysql排序问题,急等! 在问几道JAVA问题 用java实现定时关机?? 大家帮忙看看下面代码哪错了,没有达到预期的效果功能。谢谢! 请解释这个线程的问题,讲讲它的执行过程! 只能进不能退,为什么??真是没天理啊. 学编程就一定要学C++吗? 我想要个用阴阳历转换函数,急用!!!
EXCEPTION
WHEN OTHERS THEN null;
这样,就会继续执行下面该执行的动作
public static Date parse(String datestr) {
if (datestr == null) {
return null;
}
datestr = datestr.replaceAll(" ",""); // 去掉空格
datestr = datestr.replaceAll("/", ""); // 替换/
datestr = datestr.replaceAll("-", ""); // 替换-
datestr = datestr.replaceAll("\\.", ""); // 替换.
try {
return dateFormat.parse(datestr);
} catch (Exception ex) {
return null;
}
}支持
20080201
2008-02-01
2008.02.01
2008/02/01
2008 02 01
等
import java.text.SimpleDateFormat;
import java.util.Date;
然后就可以进行操作,如:Date dt = new Date();
SimpleDateFormat smpDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sTime = smpDateFormat.format(dt);根据("yyyy-MM-dd HH:mm:ss")就可以确定格式,
2008/1212
这样的应该也可以。
String str = "2000-02-01";
System.out.println(str.matches("^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$"));
try {
String s="日期字符串";
Date date=sim.parse(s);
} catch (Exception e) {
e.printStackTrace();
}
如果没有异常的话,那么s就是Oracle日期类型,否则就不是的。
try{
Date date = new Date(s);
return true;
}catch(Exception ex){
return false;
}
}
http://www.java2000.net/viewthread.jsp?tid=471
private boolean checkDateType(String date) {
//2008/12/12
String pattern1 = "^[\\d]{1,4}([\\D|\\W]{1}[\\d]{1,2}){2}$";
//2008/1212
String pattern2 = "^[\\d]{1,4}[\\D|\\W]{1}[\\d]{4}$";
//200812/12
String pattern3 = "^[\\d]{6}[\\D|\\W]{1}[\\d]{1,2}$";
//20081212
String pattern4 = "^[\\d]{8}$";
if (date.matches(pattern1)) {
String[] ymd = date.split("[\\D|\\W]");
Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1]) - 1,
Integer.parseInt(ymd[2]));
calendar.setLenient(false);
try {
calendar.get(Calendar.YEAR);
return true;
} catch (Exception e) {
return false;
} } else if (date.matches(pattern2)) {
String[] ymd = date.split("[\\D|\\W]");
Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0]), Integer.parseInt(ymd[1].substring(0, 2)) - 1,
Integer.parseInt(ymd[1].substring(2)));
calendar.setLenient(false);
try {
calendar.get(Calendar.YEAR);
return true;
} catch (Exception e) {
return false;
} } else if (date.matches(pattern3)) {
String[] ymd = date.split("[\\D|\\W]");
Calendar calendar = new GregorianCalendar(Integer.parseInt(ymd[0].substring(0, 4)), Integer.parseInt(ymd[0].substring(4)) - 1,
Integer.parseInt(ymd[1]));
calendar.setLenient(false);
try {
calendar.get(Calendar.YEAR);
return true;
} catch (Exception e) {
return false;
} } else if (date.matches(pattern4)) {
Calendar calendar = new GregorianCalendar(Integer.parseInt(date.substring(0, 4)),
Integer.parseInt(date.substring(4, 6)) - 1, Integer.parseInt(date.substring(6)));
calendar.setLenient(false); try {
calendar.get(Calendar.YEAR);
return true;
} catch (Exception e) {
return false;
}
} else {
return false;
}
}