判断日期合法性 不能使用try java 中 可以通过setLenient(false)然后捕获IllegalArgumentException异常判断日期合法性有没有不用异常判断的方法?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己编程,可以考虑用正则判断格式,然后自己判断每一部分的值是否合法,或用Date相关类判断数值是否合法 /** * IS yyyy-MM-dd Date String * * @param date * @return boolean */ public static boolean isDate(String date) { boolean flag = false; String dateStr = (date == null) ? "" : date; if (dateStr.length() > 10) return false; Pattern p = Pattern .compile("^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$"); Matcher m = p.matcher(date); if (m.matches()) flag = true; return flag; } 唉 传入的参数时Calendar 实例需要判断它是否时合法的用正则当然也可以解决,只是那样子感觉绕的很远了 两裤衩的也是up正则表达式, 绕弯了吧...Java中输入非法日期, 比如2006-2-30, 创建的Calendar会自动往后顺延, 成为2006-3-2. 你使用Calendar.get(...)判断是否相同就可以了, 如果不同则日期肯定是非法的. package com.rcom10002;import java.util.Calendar;public class Main { /** * @param args */ public static void main(String[] args) { System.out.println(isValidDate("2005-06-31")); } /** * 验证格式为YYYY-MM-DD的字符串是否是有效的日期 * * @param customDate * 日期字符串 * @return 有效时返回true,无效时返回false */ public static boolean isValidDate(String customDate) { if (customDate == null) { return false; } if (!customDate.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) { return false; } String[] dateParts = customDate.split("-"); int[] dateIntParts = { Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]), Integer.parseInt(dateParts[2]) }; int[] dateParsedParts = new int[3]; Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(dateIntParts[0], dateIntParts[1] - 1, dateIntParts[2]); dateParsedParts[0] = calendar.get(Calendar.YEAR); dateParsedParts[1] = calendar.get(Calendar.MONTH) + 1; dateParsedParts[2] = calendar.get(Calendar.DATE); return (dateParsedParts[0] == dateIntParts[0]) && (dateParsedParts[1] == dateIntParts[1]) && (dateParsedParts[2] == dateIntParts[2]); }} 请教增强for循环中的一个问题。 BlueJ里怎么输入String数据_菜鸟求大虾帮忙 求解决越界的问题,各位大神帮个忙! 怎么根据字节流获得图片真实路径? java基础教程中 堆 和 栈 自己的理解!~ (请教) 做静态页面有啥可视化编辑器 请教画线问题. 如何产生所有的数字序列。 为什么JAVAC不能用重定向输出阿! 管道线程能够接收数据,然后显示异常:java.io.IOException:write end dead; 做项目的时候哪些知识比较重要? String类一旦定义就不能改变,是什么意思?
可以考虑用正则判断格式,然后自己判断每一部分的值是否合法,或用Date相关类判断数值是否合法
* IS yyyy-MM-dd Date String
*
* @param date
* @return boolean
*/
public static boolean isDate(String date) {
boolean flag = false;
String dateStr = (date == null) ? "" : date;
if (dateStr.length() > 10)
return false;
Pattern p = Pattern
.compile("^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$");
Matcher m = p.matcher(date);
if (m.matches())
flag = true;
return flag;
}
需要判断它是否时合法的
用正则当然也可以解决,只是那样子感觉绕的很远了
* @param args
*/
public static void main(String[] args) {
System.out.println(isValidDate("2005-06-31"));
} /**
* 验证格式为YYYY-MM-DD的字符串是否是有效的日期
*
* @param customDate
* 日期字符串
* @return 有效时返回true,无效时返回false
*/
public static boolean isValidDate(String customDate) {
if (customDate == null) {
return false;
}
if (!customDate.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {
return false;
}
String[] dateParts = customDate.split("-");
int[] dateIntParts = { Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]),
Integer.parseInt(dateParts[2]) };
int[] dateParsedParts = new int[3];
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(dateIntParts[0], dateIntParts[1] - 1, dateIntParts[2]);
dateParsedParts[0] = calendar.get(Calendar.YEAR);
dateParsedParts[1] = calendar.get(Calendar.MONTH) + 1;
dateParsedParts[2] = calendar.get(Calendar.DATE);
return (dateParsedParts[0] == dateIntParts[0]) && (dateParsedParts[1] == dateIntParts[1])
&& (dateParsedParts[2] == dateIntParts[2]);
}
}