A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我是菜鸟,刚刚做了黑马入学考试,这题花了我3个小时的时间才写好,没有用java提供的日期相关的类和方法,自己用正则校验的日期格式,然后根据输入的日期距离元年元月元日有多少天,计算出今天是周几,程序写的很烂,也不确定是对的,各位大神多多指教。

我知道我日期校验的不准确,譬如输入2015-09-31也会通过校验,但9月份貌似没有31天。。。求高手优化
package com.itheima;
import java.util.Scanner;
/**
* 第九题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
* 程序计算这一天是星期几,并且计算出是一年中的第几天。
*
* @author 张玉飞
*
*思路:先用正则过滤输入的日期格式,日期输入不正确时,异常捕捉并给提示;
*正确的话,再把字符串截取,转化成对应的整形年月日,再判断输入的年份距离元年有多少天,
*输入的月份距离元月有多少天,再加上日份距离元日有多少天,三者之和既是输入的日期距离
*元年元月元日有多少天,因为元年元月元日为星期一,三者之和再求余七,既是星期几。
*/
public class Test9 {
        public static void main(String[] args) {
                try
                {
                        //持续从键盘获取日期,当日期格式不正确时,结束,正确的话可以继续输入测试日期
                        Scanner input = new Scanner(System.in);
                        while(input.hasNext())
                        {
                                //用正则验证日期格式,年数是由0-9四位组成,月份由十位为0个位为0-9或者十位为1个位为0-2组成,
                                //日由十位为0-2个位0-9或者十位为3个位0-1组成
                                String date = input.next("[0-9]{4}-((0[0-9])|1[0-2])-(([0-2][0-9])|3[01])");
                                //截取把日期字符串,前四位为年份,截取后转换成整形
                                int _year = Integer.parseInt(date.substring(0, 4));
                                //截取把日期字符串,第六第七位为月份,截取后转换成整形
                                int _month =  Integer.parseInt(date.substring(5,7));
                                //截取把日期字符串,最后两位为日期,截取后转换成整形
                                int _day =  Integer.parseInt(date.substring(8,10));
                                //把二月份当作一个变量,根据平年闰年来赋值
                                int feb = 28;
                                //如果输入的是闰年,二月份就29天
                                if((_year%4==0)&&(_year%100!=0))
                                {
                                        feb = 29;
                                }
                                //月份数组
                                int[] month = {31,feb,31,30,31,30,31,31,30,31,30,31};
                                //把输入数据的月份化成天数
                                int month2day = 0;
                                for(int i=_month-1;i>0;i--)
                                {
                                        month2day += month[i-1];
                                }
                                //把输入的年数化成天数
                                int year2day = (_year-1)*365+((_year-1)/4-(_year-1)/100+(_year-1)/400)*1;
                                //输的日期距元年元月元日有多少天,膜7余数就是周几
                                int weekday = (_day + month2day + year2day)%7;
                                String[] week = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
                                //今天天周
                                System.out.println(date+" 是 "+week[weekday]);
                                //一年中的第几天
                                System.out.println("一年中的第 "+(month2day+_day) +" 天");
                        }
                }catch(Exception e)
                {
                        //日期格式不正确时  输出提示
                        System.out.println("输入的日期格式不正确");
                }
        }
}

2 个回复

倒序浏览
我是来学习的,加油
回复 使用道具 举报
学习中`````
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马