黑马程序员技术交流社区

标题: 求解呀!! [打印本页]

作者: 晓天s    时间: 2013-9-17 20:13
标题: 求解呀!!

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

作者: 麦子609    时间: 2013-9-17 20:25
代码呢  没有看到代码
作者: 胡智    时间: 2013-9-17 20:49
{:soso_e141:}咱两做的是同一到题
作者: 1098918523    时间: 2013-9-17 21:32
计算星期可用 蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形):
     W = Y + [Y/4] + [C/4] - 2C + [13(M+1)/5] + D - 1

公式中的符号含义如下:
     C:世纪数减一(年的高两位数);
     Y:年(年的低两位数);
     M:月(M大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的
        13、14月来计算,比如2005年1月1日要看作2004年的13月1日来计算);
     D:日;
     []代表取整,即只要整数部分。
     W:星期;W对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,
        5-星期五,6-星期六
     注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了
     方便计算,我们可以给它加上一个7的整数倍,使它变为一个正数。

以2005年2月14日为例:C=20,Y=4,M=14,D=14
     W = 4 + [4/4] + [20/4] - 2*20 + [26*(14+1)/10] + 14 - 1
       = 4 + 1     + 5      - 40   + 39             + 14 - 1
       = 22 (除以7余1)
所以2005年2月14日是星期一。
  1. private string str_week(int y,int m,int d){  
  2.    int a=7; // 用来保存计算得到的星期几的整数
  3.    string str_date="";
  4.    if((m==1)||(m==2))//如果是一月或二月进行换算
  5.    {
  6.     m+=12;
  7.     y--;
  8.    }
  9.    a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;   //得到的星期几的整数
  10.    switch (a){  
  11.     case 0:
  12.      str_date="星期一";
  13.      break;
  14.     case 1:
  15.      str_date="星期二";
  16.      break;
  17.     case 2:
  18.      str_date="星期三";
  19.      break;
  20.     case 3:
  21.      str_date="星期四";
  22.      break;
  23.     case 4:
  24.      str_date="星期五";
  25.      break;
  26.     case 5:
  27.      str_date="星期六";
  28.      break;
  29.     case 6:
  30.      str_date="星期日";
  31.      break;
  32.    }
  33.    return str_date;  
  34. }
复制代码

作者: 熊亮    时间: 2013-9-17 23:18
  1. /*
  2. * 需求:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的
  3. * 格式输入一个日期,程序计算这一天是星期几,并且计算出
  4. * 是一年中的第几天。
  5. * 思路:1、 为了方便,封装一个判断平年还是闰年的方法
  6. *                  2、利用for循环,if-else条件封装一个方法,用来
  7. *          计算日期基数1900年1月1日到输入日期的天数。
  8. *          细分为三个部分:日期基数到用户指定年的天数+用户指定年首日到指定月首日的天数+指定月天数
  9. *       3、用计算出的天数模以7就是星期数
  10. * */
  11. package pack;

  12. public class yearDemo {
  13.         public static void main(String[] args)
  14.         {
  15.                 sop(duty(2013,2,5));
  16.                 sop(witDay(2013,2,5));
  17.         }
  18.         private static boolean runYear(int year)//定义方法:判断用户指定年是否为闰年
  19.         {
  20.                 return (year%4==0&&year%100!=0||year%400==0);
  21.         }
  22.         private static int yeaSum(int yea)//定义方法:计算日期基数到用户指定年的天数
  23.         {
  24.                 int sum = 0;
  25.                 for(int year=1900;year<yea;year++)//以1900年为基数年
  26.                 {
  27.                         if(runYear(yea))
  28.                                 sum+=366;
  29.                         else
  30.                                 sum+=365;
  31.                 }
  32.                 return sum;
  33.         }
  34.         private static int monSum(int yea,int mon,int day)//定义方法:计算用户指定年首日到指定月首日的天数
  35.         {
  36.                 int sum = 0;
  37.                 for(int month=1;month<mon;month++)
  38.                 {
  39.                         if(month==2)
  40.                         {
  41.                                 if(runYear(yea))
  42.                                         sum+=29;
  43.                                 else
  44.                                         sum+=28;
  45.                         }
  46.                         else
  47.                         {
  48.                                 if(month==4||month==6||month==9||month==11)
  49.                                         sum+=30;
  50.                                 else
  51.                                         sum+=31;
  52.                         }
  53.                 }
  54.                 return sum;
  55.         }
  56.         public static int days(int yea,int mon,int day)//定义方法:计算1900年1月1日到输入日期的天数
  57.         {
  58.                 int sum = 0;
  59.                 sum = yeaSum(yea);//日期基数到用户指定年的天数
  60.                 sum += monSum(yea,mon,day);//用户指定年首日到指定月首日的天数
  61.                 sum += day;
  62.                 return sum;
  63.         }
  64.         public static int duty(int yea,int mon,int day)//定义方法:计算用户输入日期的星期
  65.         {
  66.                 return days(yea,mon,day)%7;
  67.         }
  68.         public static int witDay(int yea,int mon,int day)//定义方法:计算用户输入日期是本年的第几天
  69.         {
  70.                 int sum = 0;
  71.                 sum = monSum(yea,mon,day)+day;
  72.                 return sum;
  73.         }
  74.         public static void sop(Object obj)//定义方法:打印
  75.         {
  76.                 System.out.println(obj);
  77.         }
  78. }
复制代码
这部分是主要思想,非法日期抛异常的代码还在编写中……

作者: 何丛    时间: 2013-9-20 01:34
package com.itheima;

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

public class Test9 {

        /**
         *9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
         *@author 何丛
         */
        public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        //设置一个标志量
        boolean flag=true;      
        String pattern="^\\d{4}-\\d{2}-\\d{2}$";
        String dateString=null;
        System.out.print("请输入日期(yyyy-MM-dd):");
        //验证输入数据
        while(flag){
                dateString=input.next();
                if(dateString.matches(pattern)){                      
                        flag=false;
                }else {
                                System.out.println("输入有误,请重新输入!");
                        }                     
        }
        Date date=null;
        try {
                //将日期字符串转化成Date对象
                        date=new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
                } catch (ParseException e) {
                        e.printStackTrace();
                       
                }
        //实例化Calendar类
        Calendar calendar=Calendar.getInstance();
        //设置时间
        calendar.setTime(date);
        //获取信息
        int weekday=calendar.get(Calendar.DAY_OF_WEEK)-1;
        if(weekday==0)
                weekday=7;
         System.out.print("这一天是星期"+weekday);
         System.out.println(",是一年中的第"+calendar.get(Calendar.DAY_OF_YEAR)+"天");
        }

}





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