国庆星期日 1949年的国庆节(10月1日)是星期六。 今年(2012)的国庆节是星期一。

/*	国庆星期日
1949年的国庆节(10月1日)是星期六。 
今年(2012)的国庆节是星期一。
那么,从建国到现在,有几次国庆节正好是星期日呢?
只要答案,不限手段!
可以用windows日历,windows计算器,Excel公式,。。。。。
当然,也可以编程!
不要求写出具体是哪些年,只要一个数目!
千万不要提交源代码!
答案不要写在这里,写在“解答.txt”中
 */
public class T17 {
	public static int calc(int n,int m,int d){
		int[][] days = {{0,31,28,31,30,31,30,31,31,30,31,30,31},	// 平年
					   {0,31,29,31,30,31,30,31,31,30,31,30,31}};// 闰年
		int b = 0;	// 默认为平年
		if(n%4==0&&n%100!=0||n%400==0) b = 1;	// 是闰年
		int sum = d;
		for(int i=0;i<m;i++){
			sum += days[b][i];
		}
		return sum;
	}
	public static void main(String[] args){
		int count = 0;
		// 1949年的国庆节(10月2日)是星期日。 
		// 得到这年10月2号后的的剩余天数
		int total = calc(1949,12,31)-calc(1949,10,2);
		for(int i=1950;i<2012;i++){
			// calc(i)计算每年的10月1日是这一年的第天数,再用总天数对7取余==0说明是周日
			total += calc(i,10,1);	// 计算当年到10月1的总天数
			if(total%7==0){	
				System.out.println(i+"年10月1日");
				count++;	// 次数加1
			}
		}
		System.out.println("总数:"+count);
	}
}
运行结果:
1950年10月1日
1961年10月1日
1967年10月1日
1972年10月1日
1978年10月1日
1989年10月1日
1995年10月1日
2000年10月1日
2006年10月1日
总数:9

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是Java代码实现: 1. 首先需要创建一个节假表的实体类,例如: ``` public class Holiday { private Long id; private Date date; // 节假期 private String name; // 节假名称,如“元旦节”、“春节”等 private Boolean isHoliday; // 是否为节假,true表示是节假,false表示是工作 // 省略getter和setter方法 } ``` 2. 接着,需要编写一个方法来创建一整年的节假表。这里以中国的法定节假为例,代码如下: ``` public static List<Holiday> createHolidayTable(int year) { List<Holiday> holidayList = new ArrayList<>(); // 元旦节 holidayList.add(new Holiday(null, getDate(year, 1, 1), "元旦节", true)); // 春节 holidayList.add(new Holiday(null, getDate(year, 2, 4), "除夕", true)); // 除夕 holidayList.add(new Holiday(null, getDate(year, 2, 5), "春节", true)); // 春节第一天 holidayList.add(new Holiday(null, getDate(year, 2, 6), "春节", true)); // 春节第二天 holidayList.add(new Holiday(null, getDate(year, 2, 7), "春节", true)); // 春节第三天 holidayList.add(new Holiday(null, getDate(year, 2, 8), "春节", true)); // 春节第四天 holidayList.add(new Holiday(null, getDate(year, 2, 9), "春节", true)); // 春节第五天 holidayList.add(new Holiday(null, getDate(year, 2, 10), "春节", true)); // 春节第六天 // 清明节 holidayList.add(new Holiday(null, getDate(year, 4, 4), "清明节", true)); // 劳动节 holidayList.add(new Holiday(null, getDate(year, 5, 1), "劳动节", true)); // 端午节 holidayList.add(new Holiday(null, getDate(year, 6, 14), "端午节", true)); // 中秋节 holidayList.add(new Holiday(null, getDate(year, 9, 21), "中秋节", true)); // 国庆节 holidayList.add(new Holiday(null, getDate(year, 10, 1), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 2), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 3), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 4), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 5), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 6), "国庆节", true)); holidayList.add(new Holiday(null, getDate(year, 10, 7), "国庆节", true)); // 补班 holidayList.add(new Holiday(null, getDate(year, 2, 11), "春节调休", false)); holidayList.add(new Holiday(null, getDate(year, 2, 15), "春节调休", false)); holidayList.add(new Holiday(null, getDate(year, 4, 25), "清明节调休", false)); holidayList.add(new Holiday(null, getDate(year, 5, 8), "劳动节调休", false)); holidayList.add(new Holiday(null, getDate(year, 9, 27), "中秋节调休", false)); holidayList.add(new Holiday(null, getDate(year, 10, 10), "国庆节调休", false)); return holidayList; } private static Date getDate(int year, int month, int day) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(year, month - 1, day); // 月份从0开始计算,需要减1 return calendar.getTime(); } ``` 这个方法接收一个年份作为参数,返回一个List<Holiday>类型的节假表。这里使用了一个getDate方法来获取指定期的Date类型,需要注意的是,Calendar中的月份是从0开始计算的,需要在传入月份时减去1。 3. 最后,需要根据节假表判断当天期是工作、双休还是节假,代码如下: ``` @GetMapping("/checkDate") public String checkDate(@RequestParam("date") Date date) { List<Holiday> holidayList = createHolidayTable(2021); // 假设查询2021年的节假表 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); for (Holiday holiday : holidayList) { if (isSameDay(date, holiday.getDate())) { if (holiday.getIsHoliday()) { return holiday.getName(); } else { return "工作"; } } } if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) { return "周末"; } else { return "工作"; } } private static boolean isSameDay(Date date1, Date date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH) && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH); } ``` 这个方法接收一个期作为参数,先调用createHolidayTable方法获取当年的节假表,然后通过Calendar获取当天是星期几,再遍历节假表,判断当天是否为节假或工作。如果是节假,则返回节假名称;如果是工作,则返回“工作”;如果是周末,则返回“周末”。其中,isSameDay方法用于判断两个期是否为同一天。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值