DateValidator

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateValidator extends BaseValidator implements GracieValidator{
    
    public DateValidator() {
        
    }
    
    public static final String GLOBAL_DATE_FORMAT = Util.GLOBAL_DATE_FORMAT;
    public static final String CUSTOMER_DATE_FORMAT = "DD/MM/YYYY";
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using global date format
     * @param inputText          Input string text
     * @return boolean           Return true when the input text is valid date string or not by using global date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByDefaultFormat(String inputText) {
        return DateValidator.validateDate(inputText, DateValidator.GLOBAL_DATE_FORMAT);
    }
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using global date format
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when the input text is valid date string or not by using global date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByDefaultFormat(String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = DateValidator.validateDateByDefaultFormat(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using global date format
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when the input text is valid date string or not by using global date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByDefaultFormat(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = DateValidator.validateDateByDefaultFormat(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using customer date format
     * @param inputText          Input string text
     * @return boolean           Return true when the input text is valid date string or not by using customer date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByCustomerFormat(String inputText) {       
        return DateValidator.validateDate(inputText, DateValidator.CUSTOMER_DATE_FORMAT);
    }
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using customer date format
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when the input text is valid date string or not by using customer date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByCustomerFormat(String inputText, String fieldErrorParam, String fieldErrorMessage) {       
        boolean isValid = DateValidator.validateDateByCustomerFormat(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using customer date format
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when the input text is valid date string or not by using customer date format,
     *                           otherwise return false.
     */
    public static boolean validateDateByCustomerFormat(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {     
        boolean isValid = DateValidator.validateDateByCustomerFormat(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: Validate the input text whether it is valid date string or not by using specified date format
     * @param inputText          Input string text
     * @return boolean           Return true when the input text is valid date string or not by using specified date format,
     *                           otherwise return false.
     */
    private static boolean validateDate(String inputText, String format) {
        boolean isValid = false;
        
        try {
            if (!Util.isEmpty(inputText)) {
                DateFormat formatter = new SimpleDateFormat(format);
                Date date = formatter.parse(inputText);
                 
                if (formatter.format(date).equalsIgnoreCase(inputText)) {
                    isValid = true;
                } else {
                    isValid = false;
                }
            } else {
                isValid = true;
            }
        } catch (Exception e) {
            isValid = false;
        }
        
        return isValid;
    }
    
	public boolean isValid(String inputText) {
		return validateDateByDefaultFormat(inputText);
	}

	public boolean isValid(String inputText, String fieldErrorParam, String bundle, String key, String defaultMessage, String[] arguments) {
		return DateValidator.validateDateByDefaultFormat(inputText, fieldErrorParam, bundle, key, defaultMessage, arguments);
	}

	public boolean isValid(String inputText, String fieldErrorParam, String fieldErrorMessage) {
		return DateValidator.validateDateByDefaultFormat(inputText, fieldErrorParam, fieldErrorMessage);
	}
	
	public boolean isValid(String inputText, Object[] objs) {
		String format = (String) objs[0];
		return validateDate(inputText,format);
	}

}

 

import java.util.Scanner; class DateProcessor { private final int y; private final int m; private final int d; public DateProcessor(int y, int m, int d) { this.y = y; this.m = m; this.d = d; } public boolean checkLeap() { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } public int computeMonthDays() { final int[] DAYS = {31,28,31,30,31,30,31,31,30,31,30,31}; if(m == 2) return checkLeap() ? 29 : 28; return (m >= 1 && m <= 12) ? DAYS[m-1] : -1; } public void formatOutput() { System.out.printf("日期信息:%d年%02d月%02d日\n", y, m, d); } public int fetchYear() { return y; } public int fetchMonth() { return m; } } public class DateValidator { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("输入年份:"); int yr = input.nextInt(); System.out.print("输入月份(1-12):"); int mo = input.nextInt(); int maxDay = calculateMaxDay(mo, yr); System.out.print("输入日期(1-" + maxDay + "):"); int dy = input.nextInt(); DateProcessor dt = new DateProcessor(yr, mo, dy); dt.formatOutput(); System.out.printf("%d年%s闰年\n", yr, dt.checkLeap() ? "是" : "不是"); int dayCount = dt.computeMonthDays(); if(dayCount == -1) { System.out.println("无效月份(需1-12)"); } else { System.out.printf("%d月有%d天\n", mo, dayCount); } input.close(); } private static int calculateMaxDay(int month, int year) { if(month == 4 || month == 6 || month == 9 || month == 11) return 30; if(month == 2) { boolean leap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); return leap ? 29 : 28; } return 31; } }运行代码
最新发布
10-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值