zoukankan      html  css  js  c++  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 class Demo {
        public static void main(String[] args) {
            String week = week(2017,12,14);//星期四
            System.out.println(week);
        }
        public static String week(int y, int m, int d){
        //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; } return weekstr; } }

    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 class Demo2 {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            int t = sc.nextInt();
          //使用String数组接收 String[] date
    =new String[t]; for(int i=0;i<t;i++){ date[i]=sc.next(); } for(int i=0;i<t;i++){ //取字符串中的日期并转化为int类型 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代表星期日-星期六

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

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

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

    最后分享一个喜欢的句子:
    个性是什么?在我的理解里,是在合法的范围内由着自己的性子去做想做的事。而非刻意去与他人保持不同。因为你喜欢的事或人,很可能别人也正喜欢着。
  • 相关阅读:
    【转】什么时候用抽象类,什么时候用接口
    高内聚松耦合在程序设计中如何做到
    如何做高水平的程序项目设计者
    NHibernate条件查询(Criteria Query)
    Oracle学习笔记之表结构修改
    Java集合类和HashMap遍历
    Asp.net中基于Forms验证的角色验证授权
    Springconfig.xml数据库操作Bean配置
    Java 常用排序算法实现快速排序、插入排序、选择、冒泡
    .net消息队列
  • 原文地址:https://www.cnblogs.com/yang4869/p/8127480.html
Copyright © 2011-2022 走看看