日期计算

import java.util.Scanner;

 


public class Main {
//这里十三个数,第一个是0,是要对应后面的month是从1开始循环
static int m[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
int month = scanner.nextInt();
int day = scanner.nextInt();
int sum1 = cal(2011, 11, 11);
int sum2 = cal(year, month, day);
//sum1<=sum2 说明要求的年月日在2011.11.11之后,那么星期就是顺着来,正常
if(sum1 <= sum2){
//因为已知的是2011.11.11是周五所以要加上一个周期或者两个,如果是加上5,当sum2为11时,
//(11-11+5)%7结果就不是想要的了,所以加5+7=12
int sum = (sum2 - sum1 + 12) % 7;
//当sum等于0的时候,说明是周日
if(sum == 0){
sum = 7;
}
System.out.println(sum);
}else{       
//这种情况要求的年月日在2011.11.11之前,星期就是逆着来,当两个相减取余7等于0时,说明是周五
//同样,若相减取余7是1时,说明是周四(因为sum1指2011到1599的天数,sum2是求的年月日到1599的
//所以(sum1-sum2)%7等于1的时候说明星期是往前一天),依次类推
int sum = (sum1 - sum2) % 7;
if(sum == 0)        
System.out.println(5);
if(sum == 1)
System.out.println(4);
if(sum == 2)
System.out.println(3);
if(sum == 3)
System.out.println(2);
if(sum == 4)
System.out.println(1);
if(sum == 5)
System.out.println(7);
if(sum == 6)
System.out.println(6);
}
scanner.close();
}


private static int cal(int year, int month, int day) {
// TODO Auto-generated method stub
int sum = 0;
//注意,年要<year  不能<=year 否则把year这一年也算进去
for(int i = 1599; i < year; i++){
if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){
sum += 366;
}else{
sum += 365;
}
}
//注意,month也是<month
for(int i = 1; i < month; i++){
if(((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && i == 2){
sum += m[i] + 1;
}else{
sum += m[i];
}
}
sum += day;
return sum;
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值