要求:根据日期求天数,周,星期几
思路:试试不用java封装好的方法写一个日期类,属性:年、月、日;首先判断日期是否合法,
第一功能计算天数:求当月前一个月与第一月相差的天数,在加上当前月到几号的天数;
第二个功能计算第几周:用第一个求得的天数除7就得到了该日期是本年度的第几周;
第三个功能计算星期几:首先我们要找到一个坐标,以这个坐标为基准来求星期几,计算机世界里是以1970年1月1号为基准的,然而我们得知70年1月1号是星期四;这是后我们创建一个星期的二维数组,下标为0就为星期四,下标6为星期三;然后我们求出日期距离1970年1月1号的天数在对7取余,所得余数进行-1(-1是因为这个数要代表下标),然后用这个下标去找数组中对应星期几,这样就可以求出是周几了。(代码如下)
public class MyDate {
private int year;
private int month;
private int day;
public MyDate() {
super();
}
public MyDate(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int getDay() {
return day;
}
/**
* 本年度第几天
*
* @return
*/
public static int day(MyDate date) {
int years = date.getYear();
int months = date.getMonth();
int days = date.getDay();
if (!feifapanduan(years, months, days)) {
System.out.println("输入年份不合法!");
return -1;
}
/**
* 计算日期在本年度的天数
*/
int sum = 0;
for (int i = 1; i < months; i++) {
sum += ym(years, i);
}
// 返回本年度多少天
return sum + days;
}
/**
* 第几周
*/
public static void weeks(MyDate date) {
int sum = day(date);
int weeks = sum / 7;
if (sum % 7 == 0) {
System.out.println("第" + weeks + "周");
} else {
int week = weeks + 1;
System.out.println("第" + week + "周");
}
}
/**
* 星期几
*/
public static void weekxingqi(MyDate date) {
String[] wekesday = new String[] { "星期四", "星期五", "星期六", "星期天", "星期一",
"星期二", "星期三" };
int year = date.year;
int sum = day(date);
/**
* 计算日期距70年的天数 满足条件 6+n<=day<=6+7n
*
*/
int yearsum = 0;
for (int a = 1970; a < year; a++) {
if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0) {
yearsum += 366;
} else {
yearsum += 365;
}
}
// 定义距70年的天数
int ymsum = yearsum + sum;
// 天数对7取余
int weekday = ymsum % 7;
System.out.println("相距70年" + ymsum + " " + "余数" + weekday);
/**
* 循环星期数据根据余数找出星期几
*/
for (int i = 0; i < wekesday.length; i++) {
if (i == weekday - 1) {
System.out.println(wekesday[i]);
}
}
}
/**
* 判断是否闰年,选择月份
*
* @param years
* @param month
* @return
*/
public static int ym(int years, int month) {
int days = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {
days = 29;
} else {
days = 28;
}
break;
default:
break;
}
return days;
}
/**
* 判断输入日期是否合法
*
* @param year
* @param month
* @param ri
* @return
*/
public static boolean feifapanduan(int year, int month, int ri) {
if (year != 0 && month > 0 && month < 13 && ri < ym(year, month)) {
return true;
}
return false;
}
}
测试代码:
@SuppressWarnings("static-access")
public static void main(String[] args) {
// TODO Auto-generated method stub
MyDate date = new MyDate(2018, 2, 26);
System.out.println("本年度第" + date.day(date) + "天");
date.weeks(date);
date.weekxingqi(date);
}
运行结果:
OK,写出来分享,代码可直接运行