我不确定如何调用它以及如何调用它,但我正在学习Java,我的任务是创建一个数据类,它可以将日期添加到某个日期并减去并显示差异,等等。 我目前的问题是我想为一年中的每个月实施一条规则,我确信这可以采用不同的方式,但我想尝试这样做。
让我们说我们的格式为年,月,日。 2017年9月31日 如果09月允许有31天,我想在打印前检查。 所以我想写下这个:
if (MM==1 || MM==01);
其中MM是月份,假设MM的日值可以在1-30的范围内,如果数字D在该范围内则打印数字D. Java中是否有任何函数可以让你以这种方式使用范围?
答案 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确实为这样的工作提供了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 ) ;
…