設計函數實現輸入日期顯示星期幾。
下面為程序的代碼:
/************************************************************
Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.
FileName: main.cpp
Author: Light
Version : 1.0
Date: 2018/4/17
Description: 輸入日期,返回星期幾 // 模塊描述
Version: 僅用於軟件測試,完成作業// 版本信息
Function List: // 主要函數及其功能
1.
History:
// 歷史修改記錄
<author> <time> <version > <desc>
Light 18/4/17 1.0 建立函數
***********************************************************/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
String year = null;//年份
String month = null;//月份
String day = null;//日
//輸入年月日
@SuppressWarnings("resource")
Scanner scanner1 = new Scanner(System.in);
@SuppressWarnings("resource")
Scanner scanner2 = new Scanner(System.in);
@SuppressWarnings("resource")
Scanner scanner3 = new Scanner(System.in);
System.out.println("請輸入年份:");
year=scanner1.next();
System.out.println("請輸入月份:");
month=scanner2.next();
System.out.println("請輸入日:");
day=scanner3.next();
//檢測輸入是否響應
System.out.println( "輸入的時間為:" + year + "年" + month + "月" + day + "日");
//檢測輸入的內容是否為數字,或為空
if(!isNumber(year) || !isNumber(month) || !isNumber(day) )
{
System.out.println("檢測到您的輸入不合法,請輸入數字!");
}
else
{
int year_rual=Integer.parseInt(year);
int month_rual=Integer.parseInt(month);
int day_rual=Integer.parseInt(day);
//判斷輸入的日期是否合法
if (judge(year_rual,month_rual,day_rual))
{
String weekday=weekByDate(year_rual,month_rual,day_rual);
System.out.println( year + " 年" + month + " 月" + day + " 日是 " + weekday);
}
else
{
System.out.println("檢測到您的輸入不合法,請輸入合法日期!");
}
}
}
/**
* 判斷輸入的年月日是否為數字,或為空
* @param number //輸入內容
* @return boolean//返回值為true符合規則,返回值為false不符合規則
*/
public static boolean isNumber(String number)
{
if (number == null || "".equals(number.trim()))
{
return false;
}
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(number.trim());
if (isNum.matches())
{
return true;
}
else
{
return false;
}
}
/**
* 判斷輸入的年月日是否符合規則
* @param year //年份
* @param month // 月份
* @param day //天
* @return boolean//返回值為true符合規則,返回值為false不符合規則
*/
public static boolean judge (int year,int month,int day)
{
//當輸入的數字小於零時,返回false
if (year <= 0)
{
return false;
}
if (month <= 0 || month > 12)
{
return false;
}
if (day<=0 || day > 31){
return false;
}
//年份能被4整除並且不能被100整除,或者能被400整除,則為閏年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
{
if (month == 2)
{
//閏年的2月
if (day > 29)
{
return false;
}
}
}else{
//不是閏年的2月
if (month == 2)
{
if (day > 28)
{
return false;
}
}
}
//1、3、5、7、8、10、12月份為31天
int[] m1 = {1,3,5,7,8,10,12};
for (int i = 0; i < m1.length; i++){
if (month == m1[i])
{
if (day>31)
{
return false;
}
}
}
//4、6、9、12月份為30天
int[] m2 = {4,6,9,11};
for (int j = 0; j < m2.length; j++)
{
if (month == m2[j])
{
if (day > 30)
{
return false;
}
}
}
return true;
}
/**
* 根據年月日返回星期幾
* @param year //年份
* @param month //月份
* @param day //天
* @return String //返回值直接返回星期幾
*/
public static String weekByDate (int year,int month,int day)
{
String str="";
SimpleDateFormat fmt = new SimpleDateFormat("dd MM yyyy");
Date d = null;
try {
d = fmt.parse(day+" "+month+" "+year);
}
catch (ParseException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(d);
int weekDay = cal.get(Calendar.DAY_OF_WEEK);
switch(weekDay) {
case 1 : str="SUNDAY"; break;
case 2 : str="MONDAY"; break;
case 3 : str="TUESDAY"; break;
case 4 : str="WEDNESDAY"; break;
case 5 : str="THURSDAY"; break;
case 6 : str="FRIDAY"; break;
case 7 : str="SATURDAY"; break;
default: break;
}
return str;
}
}
