验证Java中(mm / yyyy)类型的日期格式

时间:2018-10-14 18:44:01

标签: java string validation date

如何将日期格式MM/YYYY验证为字符串 例子-

09/20错误

13/5651错误

3/2104是

2010年3月3日正确

4 个答案:

答案 0 :(得分:2)

使用YearMonth类。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "M/uuuu" ) ;
YearMonth ym = YearMonth.parse( "3/2018" , f ) ;

诱捕DateTimeParseException以检测到无效输入。


提示:使用标准的ISO 8601格式将日期时间值交换为文本。对于年月:YYYY-MM

java.time 类默认使用这些标准格式。

YearMonth.parse( "2018-03" ) 

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:0)

您想要的是一种自定义方法,因为您对日期的有效性设置了特殊的约束。
以下通过了您的所有4个示例:

public static boolean validDate(String date) {
    date = date.trim();
    if (date.length() < 6)
        return false;

    String[] parts = date.split("/");
    if (parts.length != 2)
        return false;

    int month = 0;
    try {
        month = Integer.parseInt(parts[0]);
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return false;
    }
    if (month < 1 || month > 12)
        return false;

    int year = 0;
    try {
        year = Integer.parseInt(parts[1]);
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return false;
    }
    if (year < 1000)
        return false;

    return true;
}

public static void main(String[] args) {
    String s1 = "09/20";
    String s2 = "13/5651";
    String s3 = "3/2104";
    String s4 = "03/2010";

    System.out.println(s1 + " " + validDate(s1));
    System.out.println(s2 + " " + validDate(s2));
    System.out.println(s3 + " " + validDate(s3));
    System.out.println(s4 + " " + validDate(s4));
}

将打印:

09/20 false
13/5651 false
3/2104 true
03/2010 true

我不确定这部分内容:

if (year < 1000)
    return false;

如果愿意,可以更改它。

答案 2 :(得分:0)

尝试此函数,如果日期有效,则返回true,否则返回false:

static boolean validateDate(String date){
    String [] split_date = date.split("/");
    //update year bounds accordingly
    int min_year = 1900;
    int max_year = 2200;
    try{
        int month = Integer.parseInt(split_date[0]);
        int year = Integer.parseInt(split_date[1]);
        if (month < 1 || month > 12){
            return false;
        }
        if (year < min_year || year > max_year){
            return false;
        }
    } catch (NumberFormatException e) {
        return false;
    }
    return true;
}

或使用此函数来验证将来的日期:

import java.util.Calendar;

static boolean validateDate(String date){
    String [] split_date = date.split("/");
    int curr_month = Calendar.getInstance().get(Calendar.MONTH);
    int curr_year = Calendar.getInstance().get(Calendar.YEAR);
    try{
        int month = Integer.parseInt(split_date[0]);
        int year = Integer.parseInt(split_date[1]);
        if (year < curr_year){
            return false;
        }
        if (month < 1 || month > 12){
            return false;
        }
        if (year == curr_year){
            if (month <= curr_month){
                return false;
            }
        }
    } catch (NumberFormatException e) {
        return false;
    }
    return true;
}

答案 3 :(得分:0)

public boolean isThisDateValid(String dateToValidate, String dateFromat){

    if(dateToValidate == null){
        return false;
    }

    SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
    sdf.setLenient(false);

    try {

        //if not valid, it will throw ParseException
        Date date = sdf.parse(dateToValidate);
        System.out.println(date);

    } catch (ParseException e) {

        e.printStackTrace();
        return false;
    }

    return true;
}

Referensi https://www.mkyong.com/java/how-to-check-if-date-is-valid-in-java/