黑马程序员技术交流社区

标题: 求助!问题 [打印本页]

作者: 为我想要的去努    时间: 2013-12-13 22:46
标题: 求助!问题
编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
作者: 为我想要的去努    时间: 2013-12-13 23:05
首先:先判断是否闰年,在利用swtch()的break;得出每个偶数月份和奇数月份的出现的次数,然后相加,最后一定要加最后一个月的天数。

星期的判定是利用DateFormat和Data中的特有的方法;
import java.io.*;  
import java.text.*;  
import java.util.Date;  
  
public class Test9 {  
  
public static void main(String[] args) throws IOException {  
  // TODO Auto-generated method stub  
  System.out.println("开始输入日期:");  
  int month = 0,day = 0;  
  long year = 0;  
   
   
  //从键盘读取数据,建立转换流  
  BufferedReader bf =   
    new BufferedReader(new InputStreamReader(System.in));  
  BufferedWriter bw =  
    new BufferedWriter(new OutputStreamWriter(System.out));  
   
  String s  = null;  
  StringBuffer sb = new StringBuffer();  
  while((s = bf.readLine())!=null){  
   //年数  
   year = Integer.valueOf(s.substring(0,4));  
   if(Integer.valueOf(s.substring(4,5)) == 0){  
    //月数  
    month = Integer.valueOf(s.substring(5,6));  
   }  
   else{  
    if(Integer.valueOf(s.substring(4,6)) <= 12)  
     month = Integer.valueOf(s.substring(4,6));  
    else  
    System.out.println("月份输入错误");  
   }  
   //当前月天数  
   day = Integer.valueOf(s.substring(6));  
   
   //调用Day方法算出天数  
   System.out.println(year+"年"+month+"月"+day+"日");  
          System.out.println("第"+Day(year,month,day)+"天");  
          WeekDay(s);  
  }  
}  
public static void WeekDay(String day){   
  String[] str ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  
  DateFormat  df = new SimpleDateFormat("yyyyMMdd");//日期格式化辅助类  
   
  Date  d = new Date();           
            try{  
                d  =  df.parse(day);//格式化日期   
            }catch(ParseException   e){  
                e.printStackTrace();  
            }   
            for(int i=0;i<str.length;i++){  
                if(d.getDay()==(i))    //根据取出来的数判断取数组下标  
                {  
                    System.out.println(str[i]);  
                }  
            }  
}  
   
public static int Day(long year,int month,int day){  
  int dateSum1 = 0;  
  for (int i = 1; i < month; i++){  
      switch(i){  
      //当月份为1,3,5,7,8,,10,12时,自动加31天  
       case 1: case 3: case 5: case 7: case 8:  case 10:   
       case 12:dateSum1 += 31; break;  
       //当月份为4,6,9,11时,自动加30天  
       case 4: case 6: case 9: case 11:dateSum1 += 30; break;  
        case 2:   
        // 判断是否为闰年,如果是加29,否加28  
         if(((year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0))  
          dateSum1 += 29;  
         else dateSum1 += 28;      
      }  
   }  
   
  return dateSum1+day;  
}  
  
}  
作者: 回音    时间: 2013-12-13 23:07
本帖最后由 回音 于 2013-12-13 23:27 编辑

import java.util.*;
import java.io.*;

public class Test
{
    public static void main(String[] args)
    {
        String date = "0000-00-00";

        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            date = br.readLine();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        String[] arr = date.split("-");
        //String[] week = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};   //英文电脑上使用
        String[] week = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"};    //中文电脑上使用
        int year = Integer.parseInt(arr[0]);
        int month = Integer.parseInt(arr[1]);
        int day = Integer.parseInt(arr[2]);

        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month - 1);  
        c.set(Calendar.DAY_OF_MONTH, day);  

        System.out.println(week[c.get(Calendar.DAY_OF_WEEK) - 1]);
        System.out.println(c.get(Calendar.DAY_OF_YEAR));
    }
}


作者: 郭涛    时间: 2013-12-13 23:48
写出来计算是一年中的第几天,给你参考一下。但是这一天是星期几,我没有好的思路所以就没写
  1. package cn.itcast.zz;

  2. import java.util.Scanner;

  3. public class Test02 {

  4.         /**
  5.          * @param args
  6.          * 该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天
  7.          */
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub
  10.                 System.out.println("这一年中的第"+theDay()+"天");
  11.         }
  12. public static int theDay(){//计算出是一年中的第几天
  13.         Scanner sc = new Scanner(System.in);//定义一个输入端,这里是需要循环的,但是为了简单实现功能就没有加while循环
  14.                                 String str = sc.nextLine();//把输入的字段变成字符串
  15.                                 sc.close();//关闭输入端
  16.                 int subDay = 0;//总天数
  17.                 String[] arr =str.split("-");//把字符串用"-"给分隔出来年.月.日
  18.                 int y =0;
  19.                 int m =0;
  20.                 int d = 0;
  21.                 try {//因为输入的过程中,可能会输错,所以需要try
  22.                         y = Integer.parseInt(arr[0]);//然后把相应的字符串转化才int数值
  23.                         m = Integer.parseInt(arr[1]);
  24.                         d = Integer.parseInt(arr[2]);
  25.                 } catch (NumberFormatException e) {
  26.                         // TODO Auto-generated catch block
  27.                         e.printStackTrace();
  28.                 }
  29.                 if(panDuan(y)){//计算总天数,因为年里面又有闰年和平年的区别的,所以还要定义个功能来判断是否是闰年或者是否是平年
  30.                         int [] arr2 ={0,31,29,31,30,31,30,31,31,30,31,30,31};
  31.                         for (int i = 1; i < m; i++) {
  32.                                  subDay =subDay + arr2[i] + d;
  33.                         }
  34.                 }else{
  35.                         int [] arr1 ={0,31,28,31,30,31,30,31,31,30,31,30,31};//
  36.                         for (int i = 1; i < m; i++) {
  37.                                  subDay =subDay + arr1[i] + d;
  38.                         }
  39.                 }
  40.                 return subDay;
  41.         }
  42.         public static boolean panDuan(int x){//判断是否闰年
  43.                 //能被4整除且又不能被100整除 是闰年
  44.                 if(x%4==0)
  45.                         if(x%100 == 0){
  46.                                 return false;
  47.                         }
  48.                 return true;
  49.        
  50.         }
  51.        
  52. }
复制代码

作者: 为我想要的去努    时间: 2013-12-13 23:55
郭涛 发表于 2013-12-13 23:48
写出来计算是一年中的第几天,给你参考一下。但是这一天是星期几,我没有好的思路所以就没写
...

谢谢了!看了一个博客 上面的那个你看一下!计算出了这天是星期几




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2