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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李洋- 中级黑马   /  2013-12-17 21:48  /  1347 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第九题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
* 程序计算这一天是星期几,并且计算出是一年中的第几天。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 神马都是浮云

查看全部评分

4 个回复

倒序浏览
思路是这样的,先把用户输入的字符串转成date对象,然后计算这一天到1970(这好像在date类里边有介绍)有多少天,然后百度出1970年第一天是星期几,那么就可以天数%7得到是星期几了。一年中的第几天可以从本年的第一天算起,根据每个月天数,润年平年,算出这是第几天了
回复 使用道具 举报
希望你能仔细理解了之后自己写,加油!

首先:先判断是否闰年,在利用swtch()的break;得出每个偶数月份和奇数月份的出现的次数,然后相加,最后一定要加最后一个月的天数。

星期的判定是利用DateFormat和Data中的特有的方法;
  1. import java.io.*;
  2. import java.text.*;
  3. import java.util.Date;

  4. public class Test9 {

  5. public static void main(String[] args) throws IOException {
  6.   // TODO Auto-generated method stub
  7.   System.out.println("开始输入日期:");
  8.   int month = 0,day = 0;
  9.   long year = 0;
  10.   
  11.   
  12.   //从键盘读取数据,建立转换流
  13.   BufferedReader bf =
  14.     new BufferedReader(new InputStreamReader(System.in));
  15.   BufferedWriter bw =
  16.     new BufferedWriter(new OutputStreamWriter(System.out));
  17.   
  18.   String s  = null;
  19.   StringBuffer sb = new StringBuffer();
  20.   while((s = bf.readLine())!=null){
  21.    //年数
  22.    year = Integer.valueOf(s.substring(0,4));
  23.    if(Integer.valueOf(s.substring(4,5)) == 0){
  24.     //月数
  25.     month = Integer.valueOf(s.substring(5,6));
  26.    }
  27.    else{
  28.     if(Integer.valueOf(s.substring(4,6)) <= 12)
  29.      month = Integer.valueOf(s.substring(4,6));
  30.     else
  31.     System.out.println("月份输入错误");
  32.    }
  33.    //当前月天数
  34.    day = Integer.valueOf(s.substring(6));
  35.   
  36.    //调用Day方法算出天数
  37.    System.out.println(year+"年"+month+"月"+day+"日");
  38.           System.out.println("第"+Day(year,month,day)+"天");
  39.           WeekDay(s);
  40.   }
  41. }
  42. public static void WeekDay(String day){  
  43.   String[] str ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  44.   DateFormat  df = new SimpleDateFormat("yyyyMMdd");//日期格式化辅助类
  45.   
  46.   Date  d = new Date();         
  47.             try{
  48.                 d  =  df.parse(day);//格式化日期
  49.             }catch(ParseException   e){
  50.                 e.printStackTrace();
  51.             }  
  52.             for(int i=0;i<str.length;i++){
  53.                 if(d.getDay()==(i))    //根据取出来的数判断取数组下标
  54.                 {
  55.                     System.out.println(str[i]);
  56.                 }
  57.             }
  58. }

  59. public static int Day(long year,int month,int day){
  60.   int dateSum1 = 0;
  61.   for (int i = 1; i < month; i++){
  62.       switch(i){
  63.       //当月份为1,3,5,7,8,,10,12时,自动加31天
  64.        case 1: case 3: case 5: case 7: case 8:  case 10:
  65.        case 12:dateSum1 += 31; break;
  66.        //当月份为4,6,9,11时,自动加30天
  67.        case 4: case 6: case 9: case 11:dateSum1 += 30; break;
  68.         case 2:
  69.         // 判断是否为闰年,如果是加29,否加28
  70.          if(((year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0))
  71.           dateSum1 += 29;
  72.          else dateSum1 += 28;   
  73.       }
  74.    }
  75.   
  76.   return dateSum1+day;
  77. }

  78. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报 1 0
楼上太麻烦,直接将用户输入的字符串转成Calendar对象,Calendare有DAY_OF_WEEK计算这一天是星期几,有DAY_OF_YEAR计算是一年中的第几天。这里没有润年平年之说。简单写两行calendar.get(calendar.DAY_OF_WEEK)得到这一天是星期几,calendar.get(calendar.DAY_OF_YEAR)得到是一年中的第几天。calendar就是输入的字符串转成的Calendar对象

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  2.                 System.out.println("请输入一个日期  yyyy-MM-dd");
  3.                 String dateString=null;
  4.                 try {
  5.                         dateString=br.readLine();
  6.                 } catch (IOException e) {
  7.                         e.printStackTrace();
  8.                 }
  9.                 if(dateString==null) {
  10.                         System.out.println("输入字符串为空");
  11.                         return ;
  12.                 }
  13.                 String[] split = dateString.split("-");
  14.                 if(split.length!=3) {
  15.                         System.err.println("输入日期格式不对");
  16.                         return ;
  17.                 }
  18.                 Calendar calendar=Calendar.getInstance();
  19.                 int intYear=Integer.parseInt(split[0]);
  20.                 //此处十二个月是从0开始计算所以输入的数字减一
  21.                 int intMonth=Integer.parseInt(split[1])-1;
  22.                 int intDate=Integer.parseInt(split[2]);
  23.                 calendar.set(intYear, intMonth, intDate);
  24.                 long inputTime=calendar.getTimeInMillis();
  25.                 calendar.set(Calendar.MONTH, 0);
  26.                 calendar.set(Calendar.DATE, 0);
  27.                 long firstTime=calendar.getTimeInMillis();
  28.                 int dayCount=(int)((inputTime-firstTime)/(1000*60*60*24));
  29.                 System.out.println("输入的日期是当年的第"+dayCount+"天");
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马