如果某个值在某个范围内,则打印java中的值

时间:2017-05-19 13:21:06

标签: java date range

我不确定如何调用它以及如何调用它,但我正在学习Java,我的任务是创建一个数据类,它可以将日期添加到某个日期并减去并显示差异,等等。 我目前的问题是我想为一年中的每个月实施一条规则,我确信这可以采用不同的方式,但我想尝试这样做。

让我们说我们的格式为年,月,日。 2017年9月31日 如果09月允许有31天,我想在打印前检查。 所以我想写下这个:

if (MM==1 || MM==01);

其中MM是月份,假设MM的日值可以在1-30的范围内,如果数字D在该范围内则打印数字D. Java中是否有任何函数可以让你以这种方式使用范围?

3 个答案:

答案 0 :(得分:0)

您可以查看此示例并创建自己的示例,请记住我们通过练习和培训来学习。

import java.util.Calendar;
import java.util.Scanner;

public class DateValidation {

    public static void main(String[] args) {
        Scanner in = new Scanner (System.in);
        System.out.println("Enter the date of this format [YYYY.MM.DD]"); // or what ever format you need (don't forget to change the pattern)
        String date = in.nextLine(); //read the entire line
        if(isValidDate(date, "\\.")){
            System.out.println("Valid Date");
        }
        else{
            System.out.println("Invalid Date");
        }
    }

    public static boolean isValidDate(String date, String pattern){
        String[] dateComponents  = date.split(pattern); // split the date String according to the pattern which is in your case a dot .
        // you know that you should have only THREE indices in the array, so check first
        if (dateComponents.length==3){ // if so go ahead
            // now take the Integer value for every subString at every index and parse it
            int year, month, day;
            try{ // wrap with try-catch block in case if there is illegal input (number format)
                year = Integer.parseInt(dateComponents[0]);
                month = Integer.parseInt(dateComponents[1]);
                day = Integer.parseInt(dateComponents[2]);
                if(year>Calendar.getInstance().get(Calendar.YEAR) || dateComponents[0].length()<4 ||
                                    (month>12||month<1) || (day>31||day<1)){ // your validation, you can change , add or remove from them
                    return false;

                }
            }catch(NumberFormatException e){
                return false;
            }
            return true;

        }
        return false;
    }           
}

<强>测试

Enter the date of this format [YYYY.MM.DD]
2017.01.01  ->  Valid Date
2018.01.01  ->  Invalid Date (now we are in 2017)
2016.13.01  ->  Invalid Date (max months is 12)
2015.12.0   ->  Invalid Date (min days is 1)
Just Text   ->  Invalid Date (not a date)

答案 1 :(得分:0)

我最终做到这一点的方式如下:

public void setDate (int y, int m, int d){
        YYYY = y;
        MM = ((m>=1 && m<=12) ? m : 1);

        int [] month = {31, 28+(YYYY%4==0?1:0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        if( d>0 && d<=month[MM-1] ) {
            DD = d;
        } else {
            DD = 1;
        }

答案 2 :(得分:0)

java.time

也许不适合你的家庭作业,但Java确实为这样的工作提供了java.time类。具体来说,是YearMonth类。

YearMonth.of(
    LocalDate.parse(
        "2017.09.31".replace( "." , "-" )
    )
).lengthOfMonth() == 31

如果该日期组件可能无效,则提取年份和月份部分以构建YearMonth对象。

YearMonth.parse(
    "2017.09.31".substring( 0, 6 ).replace( "." , "-" )
).lengthOfMonth()

要管理规则,即每月添加的天数,您可以使用EnumMap和java.time中的Month枚举。

Map< Month , Integer > rules = new EnumMap<>() ;

rules.put( Month.JANUARY , 3 ) ;
rules.put( Month.FEBRUARY , 7 ) ;
…