黑马程序员技术交流社区
标题:
求解呀!!
[打印本页]
作者:
晓天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日是星期一。
private string str_week(int y,int m,int d){
int a=7; // 用来保存计算得到的星期几的整数
string str_date="";
if((m==1)||(m==2))//如果是一月或二月进行换算
{
m+=12;
y--;
}
a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; //得到的星期几的整数
switch (a){
case 0:
str_date="星期一";
break;
case 1:
str_date="星期二";
break;
case 2:
str_date="星期三";
break;
case 3:
str_date="星期四";
break;
case 4:
str_date="星期五";
break;
case 5:
str_date="星期六";
break;
case 6:
str_date="星期日";
break;
}
return str_date;
}
复制代码
作者:
熊亮
时间:
2013-9-17 23:18
/*
* 需求:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的
* 格式输入一个日期,程序计算这一天是星期几,并且计算出
* 是一年中的第几天。
* 思路:1、 为了方便,封装一个判断平年还是闰年的方法
* 2、利用for循环,if-else条件封装一个方法,用来
* 计算日期基数1900年1月1日到输入日期的天数。
* 细分为三个部分:日期基数到用户指定年的天数+用户指定年首日到指定月首日的天数+指定月天数
* 3、用计算出的天数模以7就是星期数
* */
package pack;
public class yearDemo {
public static void main(String[] args)
{
sop(duty(2013,2,5));
sop(witDay(2013,2,5));
}
private static boolean runYear(int year)//定义方法:判断用户指定年是否为闰年
{
return (year%4==0&&year%100!=0||year%400==0);
}
private static int yeaSum(int yea)//定义方法:计算日期基数到用户指定年的天数
{
int sum = 0;
for(int year=1900;year<yea;year++)//以1900年为基数年
{
if(runYear(yea))
sum+=366;
else
sum+=365;
}
return sum;
}
private static int monSum(int yea,int mon,int day)//定义方法:计算用户指定年首日到指定月首日的天数
{
int sum = 0;
for(int month=1;month<mon;month++)
{
if(month==2)
{
if(runYear(yea))
sum+=29;
else
sum+=28;
}
else
{
if(month==4||month==6||month==9||month==11)
sum+=30;
else
sum+=31;
}
}
return sum;
}
public static int days(int yea,int mon,int day)//定义方法:计算1900年1月1日到输入日期的天数
{
int sum = 0;
sum = yeaSum(yea);//日期基数到用户指定年的天数
sum += monSum(yea,mon,day);//用户指定年首日到指定月首日的天数
sum += day;
return sum;
}
public static int duty(int yea,int mon,int day)//定义方法:计算用户输入日期的星期
{
return days(yea,mon,day)%7;
}
public static int witDay(int yea,int mon,int day)//定义方法:计算用户输入日期是本年的第几天
{
int sum = 0;
sum = monSum(yea,mon,day)+day;
return sum;
}
public static void sop(Object obj)//定义方法:打印
{
System.out.println(obj);
}
}
复制代码
这部分是主要思想,
非法日期抛异常的代码还在编写中……
作者:
何丛
时间:
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