日期Date格式判断

在一般的WEB编程中,经常会碰到字符串形式的日期,需要将这个日期转化为Date对象来使用或是存储。这是一个比较常用的功能,我们有必要将它抽取出来做成一个小工具,以备后需!

我在这里说的只是日期Date,不包括时间Time YYYY-MM-DD



    private static final String DATESTRING_CONTAINS_1 = "-";
    private static final String DATESTRING_CONTAINS_2 = "/";
    private static final String DATESTRING_CONTAINS_3 = ":";

/** *//**
     * 判断该字符串是否为正确格式的时间
     * YYYY-MM-DD YYYY:MM:DD YYYY/MM/dd
     * 注意加入对于月份和天数的判断还有闰年 比如2月28日
     * @param dateString
     * @return
     */
    public static boolean isRightDateFormat(String dateString) ...{
       
        String delimer = "";
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_1)) ...{
            delimer = StringUtils.DATESTRING_CONTAINS_1;
            return dateFormatHelper(dateString, delimer);
        }
       
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_2)) ...{
            delimer = StringUtils.DATESTRING_CONTAINS_2;
            return dateFormatHelper(dateString, delimer);
        }
       
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_3)) ...{
            delimer = StringUtils.DATESTRING_CONTAINS_3;
            return dateFormatHelper(dateString, delimer);
        }
       
        return false;
    }

//date判断辅助类
    private static boolean dateFormatHelper(String dateString, String delimer) ...{
        String [] tempSplits = new String[3];
        try ...{
            if (StringUtils.containsString(dateString, delimer)) ...{
                tempSplits = dateString.split(delimer);
                if ((Integer.parseInt(tempSplits[0])>=0 && Integer.parseInt(tempSplits[0]) <=3000)
                        && (Integer.parseInt(tempSplits[1]) >=1 && Integer.parseInt(tempSplits[1]) <=12)
                        && (Integer.parseInt(tempSplits[2]) >=1 && Integer.parseInt(tempSplits[2]) <=31)) ...{
                    //获得当前月份 如果是 4 6 9 11月份则应该是30天
                    int tmpMonth = Integer.parseInt(tempSplits[1]);
                    int tmpDate = Integer.parseInt(tempSplits[2]);
                    int tmpYear = Integer.parseInt(tempSplits[0]);
                   
                    if(tmpMonth == 4
                            || tmpMonth == 6
                            || tmpMonth == 9
                            || tmpMonth == 11) ...{
                        if (tmpDate > 30) ...{
                            return false;
                        }
                    } else if (tmpMonth == 2) ...{
                        //对于2月份天数的判断
                        if (tmpYear%4 == 0) ...{
                            if (tmpDate > 29) ...{
                                return false;
                            }
                        } else ...{
                            if (tmpDate > 28) ...{
                                return false;
                            }
                        }
                    }
                    return true;
                } else ...{
                    return false;
                }
            }
        } catch (NumberFormatException e) ...{
            // TODO Auto-generated catch block
            return false;
        }
        return false;
    }

/** *//**
     * 通过dateString得到Date对象
     * DateString的格式必须为 YYYY-MM-DD YYYY:MM:DD YYYY/MM/dd
     *
     * @param dateString
     * @return
     */
    public static Date getDateByString(String dateString) ...{
//       
//        if (!isRightDateFormat(dateString)) {
//            return null;
//        }
       
        Date retDate = null;
        SimpleDateFormat sdf = new SimpleDateFormat();
       
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_1)) ...{
            sdf.applyPattern("yyyy-MM-dd");
        }
       
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_2)) ...{
            sdf.applyPattern("yyyy/MM/dd");
        }
       
        if (StringUtils.containsString(dateString, StringUtils.DATESTRING_CONTAINS_3)) ...{
            sdf.applyPattern("yyyy:MM:dd");
        }
       
        try ...{
            retDate = sdf.parse(dateString);
        } catch (ParseException e) ...{
            retDate = null;
        }
        return retDate;
    }
在这里还对闰年,闰月,30天的月份进行了判断

使用:可以先调用isRightDateFormat方法判断字符串是否正确格式,再调用getDateByString获得Date对象

或者直接调用getDateByString方法,但要将其中注释掉的那两行添上

你可能感兴趣的:(编程,Web)