比较好的日期验证方法(2012.08.02)

今天工作碰到了一个日期验证的东西,写了个方法进行日期的验证,给定的String格式为“yyyy-MM-dd”,这个可以自行更改。

public class DateTools {

    public static String PATTERN_DATE_DAY = "yyyy-MM-dd";
    public static String PATTERN_DATE_MONTH = "yyyy-MM";
    public static String PATTERN_DATE_YEAR = "yyyy";
    private static String REGEX_DAY = "^\\d{4}-\\d{1,2}-\\d{1,2}$";
    private static String REGEX_MONTH = "^\\d{4}-\\d{1,2}$";
    private static String REGEX_YEAR = "^\\d{4}$";

    public static Calendar parseStringToDate(String startDate) {
        boolean matchesYear = Pattern.matches(REGEX_YEAR, startDate);
        boolean matchesMonth = Pattern.matches(REGEX_MONTH, startDate);
        boolean matchesDay = Pattern.matches(REGEX_DAY, startDate);

        String dateString = PATTERN_DATE_DAY;
        if (matchesYear) {
            dateString = PATTERN_DATE_YEAR;
        } else if (matchesMonth) {
            dateString = PATTERN_DATE_MONTH;
        } else if (matchesDay) {
            dateString = PATTERN_DATE_DAY;
        }

        SimpleDateFormat dateFormat = new SimpleDateFormat(dateString);
        try {
            Date date = dateFormat.parse(startDate);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            if (matchesMonth) {
                String month = "" + Integer.parseInt(startDate.substring(startDate.indexOf("-") + 1 ));
                String mm = String.valueOf(calendar.get(Calendar.MONTH) + 1);
                if (!month.equals(mm)) {
                    return null;
                }
            }
            if (matchesDay) {
                String year = "" + Integer.parseInt(startDate.substring(0, startDate.indexOf("-")));
                String month = "" + Integer.parseInt(startDate.substring(startDate.indexOf("-") + 1, startDate.lastIndexOf("-")));
                String day = "" + Integer.parseInt(startDate.substring(startDate.lastIndexOf("-") + 1));
                String yy = String.valueOf(calendar.get(Calendar.YEAR));
                String mm = String.valueOf(calendar.get(Calendar.MONTH) + 1);
                String dd = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
                if (!year.equals(yy) || !month.equals(mm) || !day.equals(dd)) {
                    return null;
                }
            }
            return calendar;
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return null;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值