java 星期_日期求星期(java)-蓝桥杯

日期求星期问题(java)-蓝桥杯

1:基姆拉尔森计算公式(计算星期)

公式:int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

此处y,m,d指代年月日;week代表星期:week= 0---6  对应:星期一到星期日

也可以 int week = (d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

则week代表星期:week= 0---6  对应:星期日到星期六

注意注意注意:使用之前1、2月要看作上一年的13、14月来计算;

public classDemo {public static voidmain(String[] args) {

String week= week(2017,12,14);//星期四

System.out.println(week);

}public static String week(int y, int m, intd){

//1、2月要看作上一年的13、14月来计算if (m == 1){

m= 13;

y--;

}if (m == 2){

m= 14;

y--;

}int week = (d +1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;//如果是int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;//那么就是0对应周一,1对应周二。依次类推

String weekstr = null;switch(week) {//这里0-6代表周日到周六

case 1:

weekstr= "星期一";break;case 2:

weekstr= "星期二";break;case 3:

weekstr= "星期三";break;case 4:

weekstr= "星期四";break;case 5:

weekstr= "星期五";break;case 6:

weekstr= "星期六";break;case 0:

weekstr= "星期日";break;

}returnweekstr;

}

}

2:例题:今夕何夕

接下来最近的哪一年里的同一个日子,和今天的星期数一样?比如今天是8月6日,星期日。下一个也是星期日的8月6日发生在2023年。

数据范围:

第一行为T,表示输入数据组数。

每组数据包含一个日期,格式为YYYY-MM-DD。

1 ≤ T ≤ 10000

YYYY ≥ 2017

日期一定是个合法的日期,对每组数据输出答案年份,题目保证答案不会超过四位数。

Sample Input

3

2017-08-06

2017-08-07

2018-01-01

Sample Output

2023

2023

2024

利用基姆拉尔森计算公式就比较简单了,但是要注意下:1、2月要看作上一年的13、14月来计算;

代码呈上:

public classDemo2 {public static voidmain(String[] args) {

Scanner sc=newScanner(System.in);int t =sc.nextInt();

//使用String数组接收

String[] date=newString[t];for(int i=0;i

date[i]=sc.next();

}for(int i=0;i

int y=Integer.parseInt(date[i].substring(0,4));int mouth=Integer.parseInt(date[i].substring(5,7));int day=Integer.parseInt(date[i].substring(8,10));//1、2月要看作上一年的13、14月来计算

if(mouth==1){

mouth=13;

y--;//不要忘了

}if(mouth==2){

mouth=14;

y--;

}//基姆拉尔森计算公式

int week1=(day+2*mouth+3*(mouth+1)/5+y+y/4-y/100+y/400)%7;//暴力搜索比较两日期

for(int year=y+1;year<=9999;year++){int week2=(day+2*mouth+3*(mouth+1)/5+year+year/4-year/100+year/400)%7;//week 从0-6 分别是星期一到星期日

if(week1==week2){if(mouth==13||mouth==14){//要把剪掉的一年加上

System.out.println(year+1);

}else{

System.out.println(year);

}break;//找到最近的输出后就跳出循环

}

}

}

}

}

补充:java强大的类库:日历类:

Calendar calendar = Calendar.getInstance(); //创建对象

//如:2017年12月29日:星期五

calendar.set(2017 , 11, 29); //传入日期;注意:月份是用0-11代表1-12月

int a = calendar.get(Calendar.DAY_OF_WEEK); //取得星期

System.out.println(a);//注意:1-7代表星期日-星期六

通过此方法可以更方便的得到星期;

用这个解决上述题肯定更快啦;就不啰嗦了。

错误或不足的地方欢迎指正!!

最后分享一个喜欢的句子:

个性是什么?在我的理解里,是在合法的范围内由着自己的性子去做想做的事。而非刻意去与他人保持不同。因为你喜欢的事或人,很可能别人也正喜欢着。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值