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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

要求:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天.
package com.itheima;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;  
public class tt{
         public static void main(String[] args)throws Exception{
                 Scanner r=new Scanner(System.in);
                 String x=r.nextLine();
                 String regex="\\D";
                 String a[]=x.split(regex);
                 int y=Integer.parseInt(a[0]);
                 int m=Integer.parseInt(a[1]);
                 int d=Integer.parseInt(a[2]);
                 int n=d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1;
                String[] str ={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  
               System.out.println("今天是:"+str[n%7]);
      
               DateFormat fm = new SimpleDateFormat("yyyy-MM-dd");
               Date date=fm.parse(x);
               
               String str1 = String.format("%tj",date);
               System.out.println("今天是这年的第"+str1+"天");
         }     
         
}
我这个程序的问题就是:这一天是星期几运行的不对;是一年中德第几天运行的还对。怎么修改啊??

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

5 个回复

倒序浏览
建议用java.util.Calendar类获取代表日期的calendar对象来实现此功能;源码如下:
回复 使用道具 举报
package com.itheima; import java.util.*; import java.io.*; public class Test9 {          /**、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,          * 程序计算这一天是星期几,并且计算出是一年中的第几天。          * @param args          *           * 思路:          * 1键盘录入;          * 2通过Calendar类,建立实例对象,并设置其代表的日期为输入的日期          * 3通过此对象的方法,获取星期,及这天为一年的第几天;          * @throws IOException           */         public static void main(String[] args) throws IOException {                 // TODO Auto-generated method stub                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));                 String day=null;                                  //日期正则表达式                 String reg="\\d{4}-((0\\d)|\\d|(1[012]))-(\\d|([012]\\d)|(3[01]))";                 while((day=bufr.readLine())!=null){                         if(!day.matches(reg)){                                 bufr.close();                                 System.out.println("非yyyy-mm-dd格式,程序退出");                                 return;                         }                         method(day);                                         }         }                  //输入的字符串通过检查后的具体对象建立及取值         public static void method(String day){                                 String[] arr=day.split("-");                                  //取出字符串对应的年月日的int值;                 int[] ts=new int[3];                 for(int i=0;i<3;i++){                         ts[i]=Integer.parseInt(arr[i]);                 }                 //获取对象实例                 Calendar cal=Calendar.getInstance();                 //设置对象实例代表的日期为键盘输入的日期                 cal.set(ts[0],ts[1]-1,ts[2]);                 //获取星期值                 String week=getWeek(cal.get(cal.DAY_OF_WEEK));                 //获取当前为一年中的第几天                 int num=cal.get(cal.DAY_OF_YEAR);                                  System.out.println(day+"这一天是"+week+",是一年中的第"+num+"天!");         }                  //通过数组拿对应int值代表的具体星期的中文形式;         public static String getWeek(int num){                                  String[] arr={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};                 return arr[num-1];         }  }
回复 使用道具 举报
calendar类运用:DAY_OF_YEAR为其静态字段表示一年中的第几天:DAY_OF_WEEK为其静态字段表示星期;0为星期日1为星期一以此类推。。。
  1. package com.itheima;
  2. import java.util.*;
  3. import java.io.*;
  4. public class Test9 {

  5.         /**、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
  6.          * 程序计算这一天是星期几,并且计算出是一年中的第几天。
  7.          * @param args
  8.          *
  9.          * 思路:
  10.          * 1键盘录入;
  11.          * 2通过Calendar类,建立实例对象,并设置其代表的日期为输入的日期
  12.          * 3通过此对象的方法,获取星期,及这天为一年的第几天;
  13.          * @throws IOException
  14.          */
  15.         public static void main(String[] args) throws IOException {
  16.                 // TODO Auto-generated method stub
  17.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  18.                 String day=null;
  19.                
  20.                 //日期正则表达式
  21.                 String reg="\\d{4}-((0\\d)|\\d|(1[012]))-(\\d|([012]\\d)|(3[01]))";
  22.                 while((day=bufr.readLine())!=null){
  23.                         if(!day.matches(reg)){
  24.                                 bufr.close();
  25.                                 System.out.println("非yyyy-mm-dd格式,程序退出");
  26.                                 return;
  27.                         }
  28.                         method(day);                       
  29.                 }
  30.         }
  31.        
  32.         //输入的字符串通过检查后的具体对象建立及取值
  33.         public static void method(String day){               
  34.                 String[] arr=day.split("-");
  35.                
  36.                 //取出字符串对应的年月日的int值;
  37.                 int[] ts=new int[3];
  38.                 for(int i=0;i<3;i++){
  39.                         ts[i]=Integer.parseInt(arr[i]);
  40.                 }
  41.                 //获取对象实例
  42.                 Calendar cal=Calendar.getInstance();
  43.                 //设置对象实例代表的日期为键盘输入的日期
  44.                 cal.set(ts[0],ts[1]-1,ts[2]);
  45.                 //获取星期值
  46.                 String week=getWeek(cal.get(cal.DAY_OF_WEEK));
  47.                 //获取当前为一年中的第几天
  48.                 int num=cal.get(cal.DAY_OF_YEAR);
  49.                
  50.                 System.out.println(day+"这一天是"+week+",是一年中的第"+num+"天!");
  51.         }
  52.        
  53.         //通过数组拿对应int值代表的具体星期的中文形式;
  54.         public static String getWeek(int num){
  55.                
  56.                 String[] arr={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
  57.                 return arr[num-1];
  58.         }

  59. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
  1. import java.text.DateFormat;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Scanner;
  5. import java.util.Date;  
  6. public class TT{
  7.          public static void main(String[] args)throws Exception{
  8.                  Scanner r=new Scanner(System.in);
  9.                  String x=r.nextLine();
  10. //                 String regex="\\D";
  11. //                 String a[]=x.split(regex);
  12. //                 int y=Integer.parseInt(a[0]);
  13. //                 int m=Integer.parseInt(a[1]);
  14. //                 int d=Integer.parseInt(a[2]);
  15. //                 int n=d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1;
  16.                 String[] str ={" ","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};  
  17.                //System.out.println("今天是:"+str[n%7]);
  18.       
  19.                SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd");
  20.                Date date=fm.parse(x);
  21.                Calendar calendar = Calendar.getInstance();//获取Calendar对象
  22.                calendar.setTime(date);//设置Calendar为你输入的日期
  23.                System.out.println("今天是:"+str[calendar.get(Calendar.DAY_OF_WEEK)]);//看名字就知道了,一周中的第几天
  24.                
  25.               // String str1 = String.format("%tj",date);
  26.                System.out.println("今天是这年的第"+calendar.get(Calendar.DAY_OF_YEAR)+"天");
  27.          }     
  28.          
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
我的做法如下:
  1. import java.text.DateFormat;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Scanner;
  5. import java.util.Date;  
  6. class tt{
  7.          public static void main(String[] args)throws Exception{
  8.              Scanner r=new Scanner(System.in);
  9.              String x=r.nextLine();
  10.              DateFormat fm = new SimpleDateFormat("yyyy-MM-dd");
  11.              Date date=fm.parse(x);
  12.              String weeks[]={"","星期日","星期一","星期二","星期三","星期四",
  13.                                     "星期五","星期六"};  
  14.              System.out.println("今天是"+weeks[fm.getCalendar().get(Calendar.DAY_OF_WEEK)]);
  15.              String str = String.format("%tj", date);
  16.              System.out.println("今天是这年的第"+str+"天");
  17.          }      
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马