T1 世纪末的星期

曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。还有人称今后的某个世纪末的12月31日,如果是星期一则会....有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星期日......

1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

请回答该年份(只写这个4位整数,不要写12月31等多余信息)

【思路】

  方法一:运用API文档中Calendar类[1]

public class 世纪末的星期 {public static void main(String[] args) throws ParseException {Calendar calendar = Calendar.getInstance();  //获取子类对象for(int i=1999;i<10000;i+=100) {calendar.set(i, 11, 31);   //该处写的一定是11,因为(0~11)对应(1月~12月)if((calendar.get(calendar.DAY_OF_WEEK)==1)) { //(0,1,2,3,4,5,6)对应(星期六,日,一,二,三,四,五)System.out.println(i);break;}}    }
}

  方法二:基姆拉尔森计算公式

y:年 m:月 d:日 w:星期几
w= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 注意:
1.w的取值范围是0,1,2,3,4,5,6,分别代表星期日,星期一,星期二,星期三,星期四,星期五,星期六。
2.今年的1、2月要换成去年的13、14月   eg:2020-1-1则换算成2019-13-1来代入公式计算。
3.这个公式可以直接计算出那个日期是星期几,但请注意!这类问题如果假设和真实情况不符的时候要记得换上偏移量,比
public class Main {public static void main(String[] args) {int y = 1999;int m = 12;int d = 31;int w;for(;y<10000;y+=100) {w = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;if(w==0) {System.out.println(y);break;}}}
}

【扩展】

java.util.Calendar 是日历类。

在Date后出现,替换掉了许多Date的方法。该类将所有可能   用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。   Calendar类无法直接创建对象使用,里边有一个静态方法getInstance(),该方法返回了   Calendar类的子类对象

1  获取方式

Calendar为抽象类,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar cal = Calendar.getInstance();/*Calendar静态方法
public static Calendar getInstance() :使用默认时区和语言环境获得一个日历 */

2  常用方法

public class 世纪末的星期 {public static void main(String[] args) throws ParseException {Calendar calendar = Calendar.getInstance();  //获取子类对象System.out.println("今天时间是:"+calendar.getTime());System.out.println("今天时间是:"+new Date());System.out.println("今年年份是:"+calendar.get(calendar.YEAR)+"年");System.out.println("今天月份是:"+(calendar.get(calendar.MARCH)+1)+"月");System.out.println("今天是几号:"+calendar.get(calendar.DAY_OF_MONTH));System.out.println("今天是几号:"+calendar.get(calendar.DATE)+"日");System.out.println("今天是星期:"+(calendar.get(calendar.DAY_OF_WEEK)-1));//注意:获取星期几(六-五)-(0-6)System.out.println("今天是本月的第几周::"+calendar.get( calendar.DAY_OF_WEEK_IN_MONTH));System.out.println("今天是这一年中的第几天:"+calendar.get(calendar.DAY_OF_YEAR));System.out.println("现在几点:"+calendar.get(calendar.HOUR));  //12小时值System.out.println("现在几点:"+calendar.get(calendar.HOUR_OF_DAY)); //24小时System.out.println("现在几分:"+calendar.get(calendar.MINUTE));System.out.println("现在几秒:"+calendar.get(calendar.SECOND));System.out.println("现在几毫秒:"+calendar.get(calendar.MILLISECOND));calendar.set(1999, 11, 31);System.out.println("指定的时间是:"+calendar.getTime());System.out.println("指定的时间是星期几:"+(calendar.get(calendar.DAY_OF_WEEK)-1));System.out.println("今天时间是:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()));System.out.println("今天时间是:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(calendar.getTime()));//String 转 DateSimpleDateFormat sdf = new SimpleDateFormat();sdf.applyPattern("yyyy-MM-dd HH:mm:ss SSS");Date d = sdf.parse("2018-08-08 08:08:08 888");System.out.println("今天时间是:"+d);calendar.setTime(d);System.out.println("指定的时间是:"+calendar.getTime());}
}

3 注意事项

西方星期的开始为周日,中国为周一。在Calendar类中,月份的表示是以0-11代表1-2月。日期是有大小关系的,时间靠后,时间越大。

算法   基姆拉尔森计算公式外文名是Kim larsen calculation formula。

本公式用来计算指定的年月日是星期几

算法如下:

基姆拉尔森计算公式 [1]  (C++与VB.Net整数除法和取余运算符不同)

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7 //C++计算公式

W = (D + 2 * M + 3 * (M + 1) \ 5 + Y + Y \ 4 - Y \ 100 + Y \ 400+1) Mod 7 'VB.Net计算公式

在公式中d表示日期中的日数,m表示月份数,y表示年数。

w表示星期,w的取值范围是0~6,0代表星期日,1~6星期一到星期六。

注意:在公式中有个与其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

//y-年,m-月,d-日期
string CaculateWeekDay(int y,int m, int d)
{if(m==1||m==2) {m+=12;y--;}int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;string weekstr="";switch(week){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;
}

世纪末的星期(Java-蓝桥杯-省赛-T1)初学者详解相关推荐

  1. 49-2017年第八届蓝桥杯国赛试题及详解(Java本科B组)

    蓝桥杯历年真题题目及题解目录汇总(推荐) 蓝桥杯算法模板常用套路及API等个人总结 ---------------------------------------------------------- ...

  2. 2013年第四届蓝桥杯国赛试题及详解(Java本科B组)

    蓝桥杯历年真题题目及题解目录汇总 结果填空 (满分10分) 结果填空 (满分12分) 代码填空 (满分8分) 程序设计(满分17分) 程序设计(满分22分) 程序设计(满分31分) 1.标题:猜灯谜 ...

  3. 2014年第五届蓝桥杯省赛试题及详解(Java本科A组)

    蓝桥杯历年真题题目及题解目录汇总  结果填空 (满分2分) 结果填空 (满分6分) 结果填空 (满分7分) 代码填空 (满分4分) 代码填空 (满分12分) 结果填空 (满分12分) 结果填空 (满分 ...

  4. 2018年第九届蓝桥杯省赛试题及详解(Java本科B组)

    结果填空 (满分5分) 结果填空 (满分7分) 结果填空 (满分13分) 结果填空 (满分17分) 代码填空 (满分9分) 程序设计(满分11分) 程序设计(满分19分) 程序设计(满分21分) 程序 ...

  5. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  6. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  7. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  8. 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  9. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...

  10. 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. 【新产品发布】EVC9001 USB 隔离器
  2. cmake / aux_source_directory
  3. linux rpm 没有返回,容易忘记的linux命令之rpm
  4. C++与C语言中有关数组中元素排序
  5. MYSQL导出数据报错ERROR 1290 (HY000) 和 ERROR 1 (HY000)
  6. 5u以太网用交换机连接电脑_干货丨如何用自己的电脑直接连接NUS打印机
  7. UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 0: invalid continuation byte问题
  8. 【剑指 offer】(十四)—— 调整数组顺序使奇数位于偶数之前
  9. SWT: 发起事件 post event
  10. Linux使echo命令输出结果带颜色
  11. 硬原理——DC-DC升压(BOOST)电路原理
  12. Discuz安装短信宝短信插件教程
  13. GAS超标,以太坊告急
  14. Windows管理用户账号
  15. Java银联卡支付小系统
  16. 正斜杠 “/” 与反斜杠 “\”辨析
  17. 电影与幸福感期末答案和平时测试答案
  18. 第二证券|11天9板,“超级面料”概念火爆,高管却偷偷减持
  19. lyapunov直接法
  20. 关于2013年10大数字标牌行业发展趋势的预测与分析

热门文章

  1. excel 做data analysis
  2. 易邮件群发大师 v3.00.505 免费
  3. 将一组png图片转为nii.gz
  4. java程序设计基础_陈国君版第五版_第五章例题
  5. 兰州大学计算机专业复试流程,兰大计算机复试相关事宜
  6. 分享60个ASP整站程序源码,总有一款适合您
  7. Loncom封装器——从后门攻击到Cobalt Strike渗透测试神器都用到了它
  8. Latex 严格大于小于
  9. bogus generating test data
  10. PTA 1060 爱丁顿数(Python3)