上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