我做得一道基础测题,代码如下:
- import java.util.Scanner;
- /**
- * 9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
- *
- * @author Lance
- *
- */
- public class Test9 {
- public static void main(String[] args) {
- // 输入一个日期,传递给函数并打印机计算结果
- System.out.print("请按“yyyy-MM-dd”的格式输入一个日期:");
- Scanner scanner = new Scanner(System.in);
- String s = scanner.nextLine();
- scanner.close();
- calDate(s);
- }
- public static void calDate(String s) {
- // 将输入的包含日期的字符串分割成三个字符串,分别包含年、月、日
- String[] date = s.split("-");
- // 将字符串转换为数字
- int y = Integer.parseInt(date[0]);
- int m = Integer.parseInt(date[1]);
- int d = Integer.parseInt(date[2]);
- // 调用函数打印结果
- System.out.println("这是一年中的第" + dayCount(y, m, d) + "天。");
- System.out.println("这一天是" + getDOW(y, m, d) + "。");
- }
- // 判断一个年份是否为闰年
- public static boolean isLeapYear(int y) {
- if (y % 400 == 0)
- return true;
- else if (y % 100 == 0)
- return false;
- else if (y % 4 == 0)
- return true;
- else
- return false;
- }
- // 计算一个日期是一年中的第几天
- public static int dayCount(int y, int m, int d) {
- int count = 0;
- // 将一年中一至十二月的每个月的天数储存到一个整数数组中
- int[] dn = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- // 非闰年时的天数
- for (int x = 0; x < m; x++)
- count = count + dn[x];
- count = count + d;
- // 闰年时的天数
- if (isLeapYear(y) & m > 2)
- return count + 1;
- return count;
- }
- // 以1999年12月31日星期五为基准日期,计算一个日期与它之间相差的天数,并推算该日期为星期几
- public static String getDOW(int y, int m, int d) {
- final int YEAR = 1999;
- // 定义一个字符串数组储存“星期一”到“星期日”七个字符串
- String[] wd = { "星期五", "星期六", "星期日", "星期一", "星期二", "星期三", "星期四" };
- int dif = 0, count = 0;
- if (y > YEAR) {
- // 计算所求日期与基准日期之间的闰年的个数
- for (int x = 2000; x < y; x+=4) {
- if (isLeapYear(x))
- count++;
- }
- dif = 365 * (y - YEAR - 1) + count + dayCount(y, m, d);
- return wd[dif % 7];
- } else if (y < YEAR) {
- // 计算所求日期与基准日期之间的闰年的个数
- for (int x = 1996; x > y; x-=4) {
- if (isLeapYear(x))
- count++;
- }
- dif = 365 * (YEAR - y + 1) + count - dayCount(y, m, d);
- return wd[wd.length - (dif % 7)];
- }
- return wd[0];
- }
- }
复制代码 |
|