分享11:老婆问你各种纪念日

计算纪念日

前言:某一天小白问大白我们结婚多久了,大白思索良久,拿出日历看了看,说到估计xxx天了吧,这时只见天空顿时灰暗(大白暗叫不好),一个巴掌最终还是拍响了。。。。。

分享一个自己耍朋友的时候用的纪念日计算工具案例吧。

测试:

在这里插入图片描述

java代码

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

public class Live {
    //控制台输入流
    private Scanner cin = new Scanner(System.in);
    public static void main(String[] args) throws ParseException {
        Live l = new Live();
        String time = l.infoStringDate();
        while (!l.isDate(time)) {time = l.reInfoStringDate();}
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(time);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int miss = l.infoMiss();
        while (miss != -1) {
            show(calendar, miss, date);
            calendar.setTime(date);
            miss = l.infoMiss();
        }
        System.out.println("欢迎下次使用");
    }
    /**
     * 显示计算结果
     * @param calendar
     * @param miss
     * @param date
     */
    public static void show(Calendar calendar, int miss, Date date) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd EE");
        calendar.add(Calendar.DATE, miss);
        date = calendar.getTime();
        System.out.println("请注意你们的" + miss + "天的纪念日是:" + sdf1.format(date));
    }
    public int infoMiss() {
        System.out.println("输入特殊纪念时间(如:520,输入-1结束)");
        return cin.nextInt();
    }
    /**
     * 检查输入的时间是否满足格式要求
     * @param date 时间字符串
     * @return 是否满足要求
     */
    public boolean isDate(String date) {
        // 第一格式检查
        boolean ok = date.matches("[1-9]{1}[0-9]{3}-(0[1-9]{1}|1[1-2]{1}|10)-[0-3]{1}[0-9]{1}");
        // 第二日期校验
        String[] data = date.split("[-/.+]");
        ok = ok && isMonthAndDay(date);
        return ok;
    }
    private boolean isMonthAndDay( String date ) {
        String[] data = date.split("[-/.+]");
        String month=data[1], day = data[2];
        boolean ok = true;
        //二月
        if (month.matches("0[2]||2")) {
            if(isRunYear(Integer.parseInt(data[0]))) {// 闰年
                if (!day.matches("0[1-9]||[1-9]||1[0-9]||2[0-9]")) {
                    ok = false;
                }
            }else {// 非闰年
                if (!day.matches("0[1-9]||[1-9]||1[0-9]||2[0-8]")) {
                    ok = false;
                }
            }
        } else {// 2月份以外的大小月 【1大2小3大xxxx】
            if (month.matches("0[13578]||[13578]||1[02]")) {//大月
                if (!day.matches("0[1-9]||[1-9]||[12][0-9]||3[01]")) {
                    ok = false;// 天数不对
                }
            } else if (month.matches("0[469]||[469]||11")) {//小月
                if (!day.matches("0[1-9]||[1-9]||[12][0-9]||30")) {
                    ok = false; // 天数不对
                }
            }
        }
        return ok;
    }
    public boolean isRunYear(int year) {
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {// 是闰年
            return true;
        } else {return false;}
    }
    /**
     * 输入初始时间,已字符串的格式输入
     * @return 返回输入的字符串格式
     */
    public String infoStringDate() {
        System.out.println("请输入爱情开始的时间:格式(2016-01-07)");
        return cin.nextLine();
    }
    public String reInfoStringDate() {
        System.out.println("输入时间不符合要求,请按要求重新输入(格式:2016-01-07)");
        return cin.nextLine();
    }
}

代码未经专业测试,望指教。
畅想:集成一个短信,或者邮件提醒的服务,对用户指定特殊纪念日发送短信提醒(做大做强-)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章