不吉利的日期

前言

牛客网PAT乙级训练1029

题目描述

在国外,每月的 13 号和每周的星期 5 都是不吉利的。特别是当 13 号那天恰好是星期 5时,更不吉利。
现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份。

输入描述

输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。

输出描述

对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。
如果当年不存在13号是星期五的月份,就输出一行Luck。

输入例子

2000
2001
2002

输出例子

10
4 7
9 12

解析

如果使用Java语言就可以很快的解决这道题,只需要使用到Java util包下的Calendar类就可以了。

解决方案

import java.util.Calendar;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int year = scanner.nextInt();
            int count = 0;
            Calendar c = Calendar.getInstance();
            c.set(Calendar.YEAR, year);
            c.set(Calendar.DAY_OF_MONTH, 13);
            for (int i = 0; i < 12; i++) {
                c.set(Calendar.MONTH, i);
                if (c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
                    count++;
                    System.out.print(count == 1 ? "" : " ");
                    System.out.print(i + 1);
                }
            }
            System.out.println(count == 0 ? "Luck" : "");
        }
        scanner.close();
    }
}

小结

在这里来小结一下Calendar类的用法:

  • 获取时间
import java.util.Calendar;
public class Test
{
    public static void main(String[] args)
    {
        Calendar cal = Calendar.getInstance();
        int year = cal.get(Calendar.YEAR);
        //比当前月份少1
        int month = cal.get(Calendar.MONTH);
        //date表示日期,day表示天数,所以date与day_of_month相同
        int date = cal.get(Calendar.DATE);
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        //表示本周的第几天,从周日开始计算
        int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
        int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
        //12小时制
        int hour = cal.get(Calendar.HOUR);
        //24小时制
        int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        int millisecond = cal.get(Calendar.MILLISECOND);
        int maxDate = cal.getActualMaximum(Calendar.DATE);
        System.out.println("现在的年份为:" + year);
        System.out.println("现在的月份为:" + month);
        System.out.println("现在的号为:" + date);
        System.out.println("现在的号为:" + dayOfMonth);
        System.out.println("现在是星期:" + dayOfWeek);
        System.out.println("现在过了的天数为:" + dayOfYear);
        System.out.println("现在几点:" + hour);
        System.out.println("现在几点:" + hourOfDay);
        System.out.println("现在几分:" + minute);
        System.out.println("现在几秒:" + second);
        System.out.println("现在几毫秒:" + millisecond);
        System.out.println("本月最后一天是:" + maxDate);
    }
}

注意:

  1. 获得的月份必须加1,例如当前月份是11月,但是执行cal.get(Calendar.MONTH)获得的值却是10
  2. 获得的星期几是从周日开始算,例如今天是星期日,但是执行cal.get(Calendar.DAY_OF_WEEK)获得的结果却是1
  • 设置时间
cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月) 
cal.set(Calendar.YEAR, 2014);//年 
cal.set(Calendar.MONTH, 7);//月(月份0代表1月) 
cal.set(Calendar.DATE, 11);//日 
cal.set(Calendar.HOUR_OF_DAY, 15);//时 
cal.set(Calendar.MINUTE, 33);//分 
cal.set(Calendar.SECOND, 32);//秒 
  • 运算时间
cal.add(Calendar.YEAR, 1);//年 
cal.add(Calendar.MONTH, 1);//月 
cal.add(Calendar.DATE, 1);//日 
cal.add(Calendar.HOUR_OF_DAY, -1);//时 
cal.add(Calendar.MINUTE, 1);//分 
cal.add(Calendar.SECOND, 1);//秒 
cal.add(Calendar.DATE, 7);//周

你可能感兴趣的:(不吉利的日期)