文章目录

  • 1、判断日期是否合法
  • 2、创建主方法,测试输入日期是否合法
  • 3、判断日期是否是回文日期
  • 4、修改主方法,输出该日期之后的第一个回文日期
  • 5、 判断是否是ABABBABA型回文日期
  • 6、修改主方法,输出该日期之后的第一个ABABBABA回文日期
  • 完整的源代码


1、判断日期是否合法

package g01;

/**
 * 功能:输出指定要求的回文日期
 * 作者:小小榕
 * 日期:2022/5/19 16:13
 */
public class PalindromicDate {
    public static boolean isLegalDate(String strDate){
        int year, month, day;
        year = Integer.parseInt(strDate.substring(0, 4));
        month = Integer.parseInt(strDate.substring(4, 6));
        day = Integer.parseInt(strDate.substring(6));

        if (year < 1000 || year > 8999) return false;
        if (month < 1 || month > 12) return  false;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            if (day < 1 || day > 31) return false;
        }else if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {// 闰年判
                if (day < 1 || day > 29) return false;
            }else {
                if (day < 1 || day > 28) return false;
            }
        }else {
            if (day < 1 || day > 30) return false;
        }
        return true;
    }
}

2、创建主方法,测试输入日期是否合法

  • 判断输入日期是否合法,给出相应提示。
public static void main(String[] args) {                  
     String strDate;                                       
     int year, month, day;                                 
     Scanner sc = new Scanner(System.in);
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");                  
                                                           
     System.out.print("输入8为数构成的日期:");                      
     strDate = sc.next();                                  
                                                           
     if (isLegalDate(strDate)) {                           
         System.out.println("[" + strDate + "]是合法日期~");    
     }else {                                               
         System.out.println("[" + strDate + "]是非法日期~");    
     }                                                     
 }
  • 结果1
  • 合法的情况
  • java判断日期格式对不对 java判断日期是否合法_java

  • 结果2
  • 年份、月份和天日都对,但是长度不对
  • java判断日期格式对不对 java判断日期是否合法_主方法_02

  • 月份和天日都不对
  • java判断日期格式对不对 java判断日期是否合法_主方法_03

3、判断日期是否是回文日期

  • 定义静态方法isPalindromicDATE()方法
  • 代码
/**                                                                   
 * 判断是否是回文日期                                                          
 *                                                                    
 * @param strDate                                                     
 * @return  true-回文日期,false-非回文日期                                     
 */                                                                   
                                                                      
private static boolean isPalindromicDate(String strDate) {            
    for (int i = 0; i < 4;i++){                                       
        // 采用反向思维                                                     
        if (strDate.charAt(i) != strDate.charAt(7 - i)) return false; 
    }                                                                 
    return true;                                                      
}

4、修改主方法,输出该日期之后的第一个回文日期

java判断日期格式对不对 java判断日期是否合法_java_04

  • 代码
// 将用户输入的合法日期作为日期循环的起点                                  
 year = Integer.parseInt(strDate.substring(0, 4));       
 month = Integer.parseInt(strDate.substring(4, 6));      
 day = Integer.parseInt(strDate.substring(6));           
 Calendar calendar = Calendar.getInstance();             
 calendar.set(year,month - 1,day);                       
 // 任务一、输出该日期之后的第一个回文日期                                  
 String strDate1 = strDate;                              
 Calendar calendar1 = calendar;                          
 while (true) {                                          
     calendar1.add(Calendar.DAY_OF_MONTH, 1); // 往后推1天   
     strDate1 = sdf.format(calendar1.getTime());         
     if (isPalindromicDate(strDate1)) {                  
         break;// 找到一个回文日期就跳出循环                          
     }                                                   
 }                                                       
 System.out.println("该日期之后的第一个回文日期:" + strDate1);

5、 判断是否是ABABBABA型回文日期

  • 代码
/**
     * 判断是否是回文日期
     *
     * @param strDate
     * @return  true-回文日期,false-非回文日期
     */

    private static boolean isPalindromicDate(String strDate) {
        for (int i = 0; i < 4;i++){
            // 采用反向思维
            if (strDate.charAt(i) != strDate.charAt(7 - i)) return false;
        }
        return true;
    }

    private static boolean isABABBABAPalindromicDate(String strDate) {
        if (isABABBABAPalindromicDate(String strDate)) {
            if (strDate.charAt(0) == strDate.charAt(2) && strDate.charAt(1) == strDate.charAt(3)) return true;
        }
        return false;
    }

6、修改主方法,输出该日期之后的第一个ABABBABA回文日期

java判断日期格式对不对 java判断日期是否合法_主方法_05

完整的源代码

package g01;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;

/**
 * 功能:输出指定要求的回文日期
 * 作者:小小榕
 * 日期:2022/5/19 16:13
 */
public class PalindromicDate {
    public static void main(String[] args) {
        String strDate;
        int year, month, day;
        Scanner sc = new Scanner(System.in);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

        System.out.print("输入8为数构成的日期:");
        strDate = sc.next();
        
        if (isLegalDate(strDate)) {
            System.out.println("[" + strDate + "]是合法日期~");
            // 将用户输入的合法日期作为日期循环的起点
            year = Integer.parseInt(strDate.substring(0, 4));
            month = Integer.parseInt(strDate.substring(4, 6));
            day = Integer.parseInt(strDate.substring(6));
            Calendar calendar = Calendar.getInstance();
            calendar.set(year,month - 1,day);
            // 任务一、输出该日期之后的第一个回文日期
            String strDate1 = strDate;
            Calendar calendar1 = calendar;
            while (true) {
                calendar1.add(Calendar.DAY_OF_MONTH, 1); // 往后推1天
                strDate1 = sdf.format(calendar1.getTime());
                if (isPalindromicDate(strDate1)) {
                    break;// 找到一个回文日期就跳出循环
                }
            }
            System.out.println("该日期之后的第一个回文日期:" + strDate1);
            String strDate2 = " ";
            Calendar calendar2 = calendar;
            while (true) {
                calendar2.add(Calendar.DAY_OF_MONTH, 1); // 往后推1天
                strDate2 = sdf.format(calendar2.getTime());
                if (isABABBABAPalindromicDate(strDate2)) {
                    break;// 找到一个回文日期就跳出循环
                }
            }
            System.out.println("该日期之后的第一个ABABBABA型回文日期:" + strDate2);
        }else {
            System.out.println("[" + strDate + "]是非法日期~");
        }
    }

    /**
     * 判断日期是否合法
     *
     * @param strDate
     * @return true-合法,false-不合法
     */
    public static boolean isLegalDate(String strDate){
        int year, month, day;
        year = Integer.parseInt(strDate.substring(0, 4));
        month = Integer.parseInt(strDate.substring(4, 6));
        day = Integer.parseInt(strDate.substring(6));

        if (year < 1000 || year > 8999) return false;
        if (month < 1 || month > 12) return  false;
        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
            if (day < 1 || day > 31) return false;
        }else if (month == 2) {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {// 闰年判
                if (day < 1 || day > 29) return false;
            }else {
                if (day < 1 || day > 28) return false;
            }
        }else {
            if (day < 1 || day > 30) return false;
        }
        return true;
    }

    /**
     * 判断是否是回文日期
     *
     * @param strDate
     * @return  true-回文日期,false-非回文日期
     */

    private static boolean isPalindromicDate(String strDate) {
        for (int i = 0; i < 4;i++){
            // 采用反向思维
            if (strDate.charAt(i) != strDate.charAt(7 - i)) return false;
        }
        return true;
    }

    private static boolean isABABBABAPalindromicDate(String strDate) {
        if (isPalindromicDate(strDate)) {
            if (strDate.charAt(0) == strDate.charAt(2) && strDate.charAt(1) == strDate.charAt(3)){
                return true;
            }
        }
        return false;
    }
}
  • 结果
  • 合法
  • 非法