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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张可可 中级黑马   /  2016-5-30 22:50  /  1396 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分析以下需求,并用代码实现:
        (1)通过键盘录入日期字符串,格式(2015-10-20)
        (2)输出该日期是星期几及这一年的第几天
        (3)如输入:2015-10-20,输出"2015年-10月-20日 是 星期二,是  2015年的第 293 天"

12 个回复

倒序浏览
给你个用界面录入的方法
  1. package com.heima.eclipse;
  2. import javax.swing.JOptionPane;

  3. public class DateTest {

  4. /**
  5.   * @param args
  6.   */
  7.   //上面是非闰年的,下面是闰年的每个月的天数
  8. static int M[]={31,28,31,30,31,30,31,31,30,31,30,31};
  9. static int M1[]={31,29,31,30,31,30,31,31,30,31,30,31};

  10. static int year = 0;
  11. static int month = 0;
  12. static int day = 0;
  13. static int sum_day = 0;

  14. public static void main(String[] args) {
  15.   // TODO Auto-generated method stub
  16.   String date=JOptionPane.showInputDialog(null,"请输入日期YYYY-MM-DD:","是星期几?",JOptionPane.PLAIN_MESSAGE);
  17.   
  18.   //2007-01-01是星期一,选择2007就是因为他的第一天是星期一。
  19.   //先计算输入的日期和2007年1月1日的差距天数
  20.   
  21.   //将输入的信息的年月日信息提取出来
  22.   String arr[] = date.split("-");
  23.   year = Integer.parseInt(arr[0]);
  24.   month = Integer.parseInt(arr[1]);
  25.   day = Integer.parseInt(arr[2]);
  26.   
  27.   //如果是2007年之后的
  28.   if(year>2007)
  29.   {
  30.    int i;
  31.    for(i=2007;i<year;i++)
  32.    {
  33.     if(check(i))
  34.      sum_day += 366;
  35.     else sum_day += 365;
  36.    }
  37.    comCurYear(year,0);
  38.   }
  39.   else if(year==2007)
  40.   {
  41.    comCurYear(year,0);
  42.   }
  43.   else//2007年之前的
  44.   {
  45.    int i;
  46.    for(i=2006;i>year;i--)
  47.    {
  48.     if(check(i))
  49.      sum_day += 366;
  50.     else sum_day += 365;
  51.    }
  52.    comCurYear(year,1);
  53.   }
  54.   //由于只有7个我就全部输出来了。没有用数组来判断。
  55.   int temp = sum_day%7;
  56.   if(temp==1)
  57.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期一");
  58.   if(temp==2)
  59.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期二");
  60.   if(temp==3)
  61.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期三");
  62.   if(temp==4)
  63.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期四");
  64.   if(temp==5)
  65.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期五");
  66.   if(temp==6)
  67.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期六");
  68.   if(temp==0)
  69.    JOptionPane.showMessageDialog(null,year+"年"+month+"月"+day+"日是星期日");
  70. }

  71. //检验一年是不是闰年
  72. public static boolean check(int Y)
  73. {
  74.   if(Y%400==0) return true;
  75.   else if(Y%4==0&&Y%100!=0) return true;
  76.   else return false;
  77. }
  78. public static void comCurYear(int Y,int flag)
  79. {
  80.   int year_flag=0;
  81.   if(check(Y)) year_flag=1;
  82.   
  83.   int k;
  84.   if(flag==0)//year>=2007
  85.   {  
  86.    for(k=1;k<=12;k++)
  87.    {
  88.     if(k<month)
  89.     {
  90.      if(year_flag==1)  //闰年
  91.      {
  92.       sum_day += M1[k-1];
  93.      }
  94.      else sum_day += M[k-1];
  95.     }
  96.     else if(k==month) sum_day += day;
  97.     else if(k>month) break;
  98.    }
  99.   }
  100.   if(flag==1)//year<2007
  101.   {
  102.    for(k=12;k>=1;k--)
  103.    {
  104.     if(k>month)
  105.     {
  106.      if(year_flag==1)  //闰年
  107.      {
  108.       sum_day += M1[k-1];
  109.      }
  110.      else sum_day += M[k-1];
  111.     }
  112.     else if(k==month)    //闰年
  113.     {
  114.      if(year_flag==1)
  115.      {
  116.       sum_day += M1[k-1]-day;
  117.      }
  118.      else sum_day += M[k-1]-day;
  119.     }
  120.     else if(k<month) break;
  121.    }
  122.    //下面两句话是对2007之前的年做一个处理,比如相差5天,其实是应该不是星期5而是星期2
  123.    int temp = sum_day%7;
  124.    sum_day = sum_day-temp + 7-temp;
  125.   }
  126.   return ;
  127. }
  128. }
复制代码

点评

赞!  发表于 2016-6-14 21:34
回复 使用道具 举报
JohnChan 发表于 2016-5-30 23:16
给你个用界面录入的方法

完全没看懂  不过 还是 谢谢了
回复 使用道具 举报
package com.heima;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class ClassTest {
        public static void main(String[] args) throws Exception {
String s = "2015-10-25";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(d.getTime());
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c.get(Calendar.DAY_OF_YEAR));

       
        }
}
回复 使用道具 举报
这题恨简单,  输入的字符串转为S, S 可以用simpledateformat里面的方法转为一个date的对象,  然后获取这个date的毫秒数, 调用calendar的setTimeMillis方法,    一个日期传进了calendar,  那你想要输出什么就之间输出calendar的相应的常量就好了
回复 使用道具 举报 1 0
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class homework3 {
/**
  *3.分析以下需求,并用代码实现:
        (1)通过键盘录入日期字符串,格式(2015-10-20)
        (2)输出该日期是星期几及这一年的第几天
        (3)如输入:2015-10-20,输出"2015年-10月-20日 是 星期二,是  2015年的第 293 天"
* @throws ParseException
  * */
        public static void main(String[] args) {
// 创建键盘输入流
                Scanner sc = new Scanner(System.in);
//定规则
                String regex = "\\d{1,}[-]\\d{1,2}[-]\\d{1,2}";
//循环,判断格式是否正确
                while(true) {
                        System.out.println("请输入一段日期(格式(2015-10-20)):");
//把键盘录入数据储存到day
                        String day = sc.nextLine();
//判断,不符合规格的进入下一个循环
                        if (!day.matches(regex)) {
                                System.out.println("输入的日期格式有误!请重新输入:");
                                continue;
                        }else {
//防止录入的数据中月份,大于12月
                                if (Integer.parseInt(day.substring(day.indexOf('-')+1,day.lastIndexOf('-'))) > 12) {
                                        System.out.println("输入的日期格式有误!请重新输入:");
                                        continue;
                                }else {
//创建日期格式化对象
                                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//声明一个日期对象
                                        Date d;
//处理异常
                                        try {
//把创建一个关联了字符串有对应格式日期的对象
                                                d = sdf.parse(day);
//创建一个日历对象
                                                Calendar c = Calendar.getInstance();
//设置此 Calendar 的时间
                                                c.setTime(d);
//打印相应格式的日期
                                                System.out.println(c.get(Calendar.YEAR)+"年-"+getNum(c.get(Calendar.MONTH)+1)+"月-"+getNum(c.get(Calendar.DAY_OF_MONTH))+"日 是 "+getWeek(c.get(Calendar.DAY_OF_WEEK))+",是 "+c.get(Calendar.YEAR)+"年的第"+c.get(Calendar.DAY_OF_YEAR)+"天");
                                                break;                                       
                                        } catch (ParseException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }
        }
        //设定月份和日期大于9以下的格式
        public static String getNum(int num) {
                if(num  <= 9) {
                        return "0"+num;
                }else {
                        return num+"";
                }
        }
//定义星期的新格式
        public static String getWeek(int num) {
                String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
                return arr[num];
        }
}

点评

赞!  发表于 2016-6-14 21:35
回复 使用道具 举报
public class Test_Date {

        /**
         * 分析以下需求,并用代码实现:
        (1)通过键盘录入日期字符串,格式(2015-10-20)
        (2)输出该日期是星期几及这一年的第几天
        (3)如输入:2015-10-20,输出"2015年-10月-20日 是 星期二,是  2015年的第 293 天"
         * @throws ParseException
         */
        public static void main(String[] args) throws ParseException {
                Scanner sc = new Scanner(System.in);                //建立Scanner对象
                System.out.println("请输入日期字符串:(格式:2015-10-20)");//提示输入
                Calendar c = Calendar.getInstance();                                 //创建日历对象,父类引用指向子类对象
                String str =sc.nextLine();                                                        //用str接收传入的值
                String s1 =str.substring(0,4);                                                //截取Str字符串前四位的年,
                String s2 =s1+"-01-01";                                                                //与"-01-01"拼接获得新字符串s2:2015年一月一日的日期字符串
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式化字符串为"yyyy-MM-dd"
                Date D1 =sdf.parse(str);                                                //将字符串str转化成日期对象
                Date D2 =sdf.parse(s2);                                                        //将字符串s2转化成日期对象
                c.setTime(D1);                                                                        //将日历日期设置为输入的日期
                long time =D1.getTime()-D2.getTime();                         //将输入日期获得毫秒值与当年一月一日的时间毫秒值相减获得时间差
               
                System.out.println("您输入的日期"+str+"是"+getWeek(c.get(Calendar.DAY_OF_WEEK))+",是第"
                +((time/1000/60/60/24)+1)+"天");
        }
        ////定义数组,利用查表法获得对应的星期
        public static String getWeek(int week) {               
                String [] str = {" ","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
                return str[week];
        }

}

点评

赞!  发表于 2016-6-14 21:37
回复 使用道具 举报
何亚辉 发表于 2016-5-30 23:52
这题恨简单,  输入的字符串转为S, S 可以用simpledateformat里面的方法转为一个date的对象,  然后获取这个d ...

完全没看懂,对于今天Date 都没学完的人来说,真太难了
回复 使用道具 举报
太难了,
回复 使用道具 举报
何亚辉 发表于 2016-5-30 23:52
这题恨简单,  输入的字符串转为S, S 可以用simpledateformat里面的方法转为一个date的对象,  然后获取这个d ...

对于输入的数据能不能进行合法性检查,比如输入2016-2-45,程序好像没有办法发现错误
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马