Java实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.7 综合实例

功能:求某一个日期对应的是星期几。

用3个正数year、month、day分别记载一个日期的年、月、日,计算至今的总天数total。

本实例以1980年1月1日(星期二)为起始日。

总天数=平年累计值+闰年累计值+当年前几月的累计天数+本月天数

求总天数total的步骤如下:

(1)total的初值=平年累计值+闰年累计值。

因为平年有365 天,闰年有366 天,而365 % 7=1,所以平年的总天数每年只需累计1,闰年累计2即可。因此,total的初值为:

total = year -1980 + (year-1980+3) / 4

其中,year-1980是year与1980相距的年数,即平年累计值;(year-1980+3)/4是year与1980年间相距的闰年数,即闰年累计值。

当year=1980年为闰年,当年闰年值不计,所以(year-1980+3)/4=0,而year为1981~1983时,应计1980年的闰年值,所以(year-1980+3)/4=1。

(2)计算当年前几月的累计天数,加到total上。

(3)将本月天数加到total上。

因起始日的前一日为星期一,故week的初值为1,通过计算

week = (week+total) % 7

求得所求日期是星期几。

程序如下:

CalculateWeekDay.java

import java.util.*;
import java.text.*;
public class CalculateWeekDay {
  public static void main(String[] args) {
      Date date = new Date();
      SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");// 格式化日期
      System.out.println(f.format(date));
      String str = f.format(date);
      String str1[]=str.split("-");          // 分隔日期字符串
      int year=Integer.parseInt(str1[0]);    // 使用包装类把字符串形式的整数值转换为整型
      int month = Integer.parseInt(str1[1]);
      int day = Integer.parseInt(str1[2]);
      int total, week, i;
      boolean leap = false;
      leap=(year % 400==0)|(year % 100!=0)&(year % 4==0);// 判断当年是否是闰年
      week=1;                                  // 起始日1979-12-31是monday
      total=year-1980+(year-1980+3)/4;         // 计算total的初值
      //计算当年前几月的累计天数与total的初值之和
      for (i = 1; i <= month -1; i++) {
          switch(i){                           // 判断当前月份
              case 1:
              case 3:
              case 5:
              case 7:
              case 8:
              case 10:
              case 12:
                  total = total + 31;
              break;
              case 4:
              case 6:
              case 9:
              case 11:
                  total = total + 30;
                  break;
                  case 2:
                  if (leap)
                      total = total + 29;
                  else
                      total = total + 28;
                  break;
          }
      }
      total=total+day;                        // 将本月天数加到total上
      week = (week + total) % 7;
      System.out.print("today " + year + "-" + month + "-" + day + " is ");
      switch (week) {
      case 0:
          System.out.println("Sunday");
          break;
      case 1:
          System.out.println("Monday");
          break;
      case 2:
          System.out.println("Tuesday");
          break;
      case 3:
          System.out.println("Wednesday");
          break;
      case 4:
          System.out.println("Thursday");
          break;
      case 5:
          System.out.println("Friday");
          break;
      case 6:
          System.out.println("Saturday");
          break;
      }
  }
}

程序运行结果:

2008-12-29
today 2008-12-29 is Monday