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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangyafeng1990 中级黑马   /  2013-10-20 16:55  /  1551 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wangyafeng1990 于 2013-10-20 18:35 编辑

要求方法接收三个参数:int year,int month,int day,,返回星期几,比如2013年的10月20日是星期日

评分

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

查看全部评分

5 个回复

倒序浏览
  1. public class Test {       
  2. public static void main(String[] args) throws IOException {  
  3.   // TODO Auto-generated method stub  
  4.   System.out.println("开始输入日期:");  
  5.   int month = 0,day = 0;  
  6.   long year = 0;  
  7.    
  8.    
  9.   //从键盘读取数据,建立转换流  
  10.   BufferedReader bf =   
  11.     new BufferedReader(new InputStreamReader(System.in));  
  12.   String s  = null;  
  13.   StringBuffer sb = new StringBuffer();  
  14.   while((s = bf.readLine())!=null){  
  15.    //年数  
  16.    year = Integer.valueOf(s.substring(0,4));  
  17.    if(Integer.valueOf(s.substring(4,5)) == 0){  
  18.     //月数  
  19.     month = Integer.valueOf(s.substring(5,6));  
  20.    }  
  21.    else{  
  22.     if(Integer.valueOf(s.substring(4,6)) <= 12)  
  23.      month = Integer.valueOf(s.substring(4,6));  
  24.     else  
  25.     System.out.println("月份输入错误");  
  26.    }  
  27.    //当前月天数  
  28.    day = Integer.valueOf(s.substring(6));  
  29.    
  30.    //调用Day方法算出天数  
  31.    System.out.println(year+"年"+month+"月"+day+"日");  
  32.           System.out.println("一年中的第"+Day(year,month,day)+"天");  
  33.           WeekDay(s);  
  34.   }  
  35. }  
  36. public static void WeekDay(String day){   
  37.   String[] str ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  
  38. //日期格式化辅助类  
  39.   DateFormat  df = new SimpleDateFormat("yyyyMMdd");
  40.    
  41.   Date  d = new Date();           
  42.             try{  
  43.                     //格式化日期   
  44.                 d  =  df.parse(day);
  45.             }catch(ParseException   e){  
  46.                 e.printStackTrace();  
  47.             }   
  48.             for(int i=0;i<str.length;i++){  
  49.                      //根据取出来的数判断取数组下标  
  50.                 if(d.getDay()==(i))   
  51.                 {  
  52.                     System.out.println(str[i]);  
  53.                 }  
  54.             }  
  55. }  
  56.    
  57. public static int Day(long year,int month,int day){  
  58.   int dateSum1 = 0;  
  59.   for (int i = 1; i < month; i++){  
  60.       switch(i){  
  61.       //当月份为1,3,5,7,8,,10,12时,自动加31天  
  62.        case 1: case 3: case 5: case 7: case 8:  case 10:   
  63.        case 12:dateSum1 += 31; break;  
  64.        //当月份为4,6,9,11时,自动加30天  
  65.        case 4: case 6: case 9: case 11:dateSum1 += 30; break;  
  66.         case 2:   
  67.         // 判断是否为闰年,如果是加29,否加28  
  68.          if(((year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0))  
  69.           dateSum1 += 29;  
  70.          else dateSum1 += 28;      
  71.       }  
  72.    }  
  73.    
  74.   return dateSum1+day;  
  75. }  
  76.   
  77. }  
复制代码

评分

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

查看全部评分

回复 使用道具 举报 1 0

我刚刚想到一个方法,大家交流一下:
获取一年中任何一个月的任何一天是星期几的主要代码
public  static String  getYear(int year,int month,int day){
                String[] weekday=new String[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
                Calendar c = Calendar.getInstance();
                c.set(year,month-1,day);
                int week = c.get(Calendar.DAY_OF_WEEK);
                return weekday[week-1];
        }
回复 使用道具 举报
因为计算机中的时间是从1900年1月1日开始计算的,并且1900年1月1日是星期一,所以要求出某年某月某日是星期几则需要计算出该时间到1900年 1月1日一共有多少天,然后除以7求余数,如果余数为1,则为星期一,以此类推
public static String getDayth(int year,int month,int day){
     int days = 0;    //定义变量days记录总天数
     String dayth=null;     //定义变量dayth记录星期几,用于返回结果
     for(int i=1900;i<y;i++){        //用于计算从1900年到year年一共多少天
           if((i%4==0&&i%100!=0)||(i%400==0))
                days += 366;
           else
                days += 365;
     }
     switch(m-1){    //switch语句块用于计算m-1个月的天数累加到days上
     case 11:
         days += 30;
     case 10:
         days += 31;
     case 9:
         days += 30;
     case 8:
         days += 31;
     case 7:
         days += 31;
     case 6:
         days += 30;
     case 5:
         days += 31;
     case 4:
         days += 30;
     case 3:
         days += 31;
     case 2:
         if((y%4==0&&y%100!=0)||(y%400==0))
             days += 29;
         else
             days += 28;
     case 1:
         days += 31;
     }
     days = days+d;    //累加上本月的天数
     switch(days%7){    //根据余数判断该日期是星期几
     case 1:
         dayth="星期一";
         break;
     case 2:
         dayth="星期二";
         break;
     case 3:
         dayth="星期三";
         break;
     case 4:
         dayth="星期四";
         break;
     case 5:
         dayth="星期五";
         break;
     case 6:
         dayth="星期六";
         break;
     default:
         dayth="星期日";
     }
     return dayth;
}

评分

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

查看全部评分

回复 使用道具 举报
李文帅 发表于 2013-10-20 18:32
因为计算机中的时间是从1900年1月1日开始计算的,并且1900年1月1日是星期一,所以要求出某年某月某日是星期 ...

楼主为什么没有12月或1月的计算,你的switch后面的参数减1有什么道理呢,谢谢指导
回复 使用道具 举报
中山狼 发表于 2013-10-20 22:53
楼主为什么没有12月或1月的计算,你的switch后面的参数减1有什么道理呢,谢谢指导 ...

switch后的month-1的含义是计算输入month月前month-1个月的天数,如果不减1的话,则把本月的总天数也算进去了,计算的就是本月最后一天是星期几,这样后面输入的具体本月的某一天day就没有意义了;没有12月是因为一年一共有12个月,如果输入的月份是12月,需要计算的是前11个月的总天数;1月的计算在switch语句最后,只要输入的月份大于1,则都会计算到1月份的天数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马