通过Java,以三种方式获取输入日期(格式:YYYY-MM-DD)所在月份的最后一天

package com.pratise;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.text.StyledEditorKit.BoldAction;

/**
* @author Luffy
* @date 2017/09/01
* 根据日期判断当月的最后一天日期
*
*公历闰年的精确计算方法(按一回归年365天5小时48分45.5秒)
*①普通年能被4整除且不能被100整除的为闰年.(如2004年就是闰年,1901年不是闰年)  
*②世纪年能被400整除的是闰年.(如2000年是闰年,1900年不是闰年)
*
*@ mod 2017/09/03 输入规范(输入日期的有效性检验)
*/

public class DateJudge {
public static void main(String[] args) {
getMonthLastDate1(); //第一种方法
// getMonthLastDate2(); //第二种方法
// getMonthLastDate3(); //第三种方法
}

/**
 *  第一种获值方法(以平润年的定义解析判断)
 *
 */
private static void getMonthLastDate1() {       
    Scanner sc = new Scanner(System.in);
    System.out.println("日期格式为(YYYY-MM-DD)请输入:");
    String res = sc.nextLine();

    String ym = res.substring(0, 8);//取"年-月-"
    String year = res.substring(0,4);//取年份
    String month = res.substring(5, 7);//取月份
    String day = res.substring(8, 10);
    int dayInt = Integer.valueOf(day);//号.数字化

    //输入格式判断
    Boolean b = regDateFormat(res);

    if(b)  {   
        //一个月30天的月份
        if(month.equals("04") || month.equals("07") || month.equals("09") || month.equals("11")) { 
            if (dayInt>0 && dayInt<=30) {
                System.out.println("这月的最后一天日期为:"+ym+"30");
            }else {
                System.out.println("当前输入日期不存在!");
            }
        }//2月份(28或29天)
        else if(month.equals("02")) {
            //判断平润年
            int iyear = Integer.parseInt(year);
            if(((iyear%4==0&&iyear%100!=0)||iyear%400==0)){
                if(dayInt>0 && dayInt<=29) {
                    System.out.println("这月的最后一天日期为:"+ym+"29");
                }else {
                    System.out.println("当前输入日期不存在!");
                }
            }else if(!((iyear%4==0&&iyear%100!=0)||iyear%400==0)) {
                if(dayInt>0 && dayInt<=28) {
                    System.out.println(year+"年是平年,这月的最后一天日期为:"+ym+"28");
                }else {
                    System.out.println("当前输入日期不存在!");
                }
            }

        }//一个月31天的月份
        else {
            if(dayInt>0 && dayInt<=31) {
                System.out.println("这月的最后一天日期为:"+ym+"31");
            }else {
                System.out.println("当前输入日期不存在!");
            }
        } 
    }   
    else {   
        System.out.println("输入的日期格式错误");   
    }   
}

/**
 *  第二种获值方法(获取日历函数的当月最大天数)
 *
 */
private static void getMonthLastDate2() {   
    Scanner sc = new Scanner(System.in);
    System.out.println("日期格式为(YYYY-MM-DD)请输入:");
    String res = sc.nextLine();

    //输入格式判断
    Boolean b = regDateFormat(res);

    if(b) {
        int year=Integer.parseInt(res.substring(0, 4));
        int month=Integer.parseInt(res.substring(5, 7));
        int day=Integer.parseInt(res.substring(8, 10));

        Date date = new Date();
        date.setYear(year-1900);
        date.setMonth(month-1);
        date.setDate(day);

        Calendar calendar = Calendar.getInstance();  //获得此类型的一个通用的对象
        calendar.setTime(date); //设值时间为输入的所需值

        String ym = res.substring(0, 8);//取"年-月-"
        int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  //返回指定日历字段可能拥有的最大值
        //日期输入有效性检验
        int getInputFormat = Integer.valueOf(res.substring(8, 10).replace("-", ""));//输入日期的天数


        if(getInputFormat>0 && getInputFormat<=lastDay) {
            System.out.println("该月的最后一天日期为:"+ym+String.valueOf(lastDay));
        }else {
            System.out.println("当前输入日期不存在!");
        }
    }else {
        System.out.println("输入的日期格式错误");  
    }
}

/**
 *  第三种获值方法(下月1号减一天)
 *
 */
private static void getMonthLastDate3() {
    Scanner sc = new Scanner(System.in);
    System.out.println("日期格式为(YYYY-MM-DD)请输入:");
    String res = sc.nextLine();

    //输入格式判断
    Boolean b = regDateFormat(res);

    if(b) {
        int year=Integer.parseInt(res.substring(0, 4));
        int month=Integer.parseInt(res.substring(5, 7));
        int day=Integer.parseInt(res.substring(8, 10));

        Date date = new Date();
        date.setYear(year-1900);
        date.setMonth(month-1);
        date.setDate(day);

        Calendar calendar = Calendar.getInstance();  //获得此类型的一个通用的对象
        calendar.setTime(date);  //设值时间为输入的所需值

        // 设置Calendar月份数为下一个月  
        calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);  
        // 设置Calendar日期为下一个月一号  
        calendar.set(Calendar.DATE, 1);  
        // 设置Calendar日期减一,为本月末  
        calendar.add(Calendar.DATE, -1);  

        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
        int lastDay = Integer.valueOf(String.valueOf(format.format(calendar.getTime())).substring(8, 10));
            if(day>0 && day<=lastDay) {
            System.out.println("该月的最后一天日期为:"+format.format(calendar.getTime())); 
        }else {
            System.out.println("当前输入日期不存在!");
        }
    }else {
        System.out.println("输入的日期格式错误");  
    }
}   


/**
 * 输入格式检验:YYYY-MM-DD(年份4位数字,月份01-12,天数00-39,此处天数无需细化控制,于代码逻辑中判断处理)
 */
public static Boolean regDateFormat(String res) {

    String reg="((^\\d{4}-0\\d{1}-[0-3]{1}\\d{1})|(^\\d{4}-1[0-2]{1}-[0-3]{1}\\d{1}))$";
    Pattern p = Pattern.compile(reg);    
    Matcher m = p.matcher(res);  
    boolean b = true;
    b=m.matches(); 

    return b;
}

}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值