使用者輸入一個日期,計算時星期幾,並計算時一年中的某一天,使用自定義方法判斷
說明:這篇部落格是和之前的“使用者輸入一個日期,計算時星期幾,並計算時一年中的某一天,使用正規表示式判斷”,實現的的功能相同,但是這次使用的是,自定義方式來判斷。說實話,之前用正規表示式那種方式的確減少了很多程式碼,但是那個正規表示式理解起來很痛苦,這次這個程式碼雖然多,但是相對好理解一點。
題目:編寫程式,該程式啟動後使用者可以按“yyyy-MM-dd”的格式輸入一個日期,程式計算這一天是星期幾,並且計算出是一年中的第幾天。
import java.util.Calendar;
import java.util.Scanner;
public class Test99 {
public static void main(String[] args) {
date();
}
// 題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
public static void date() {
//定義一個陣列,用於存放星期值
String[] week = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
// 定義一個變數,用於接收使用者輸入的時間
// 建立一個Scanner物件
Scanner sc = new Scanner(System.in);
System.out.println("請輸入日期:格式:yyyy-MM-dd");
// 進入死迴圈,接收輸入的年月日,當輸入的日期合法時,結束輸入
while (true) {
// 接收使用者輸入
String str = sc.nextLine();
//測試日期
// String str = "2015-02-05";
// 判斷輸入的格式是不是合法,採用正規表示式判斷。
String regex = "[0-9]{4}-[0-1][0-9]-[0-3][0-9]";
//只能確定判定輸入的格式是不是正確
if (!str.matches(regex)) {
System.out.println("輸入格式不合法,請重新輸入");
//如果當前格式輸入錯誤,提示重新輸入
continue;
}
// 定義一個陣列,用於接收拆分的字串
String[] s = str.split("-");
//判斷輸入的資料是否合法,如果不合法將重新輸入,如果合法就繼續下面的計算
if(!judgeDate(Integer.parseInt(s[0]),Integer.parseInt(s[1])-1,Integer.parseInt(s[2]))){
System.out.println("輸入資料不合法,請重新輸入");
continue;
}
//定義一個類,獲取時間
Calendar c = Calendar.getInstance();
//設定時間為輸入時間,s[0]存放年,s[1]存放月,s[2]存放日。
//由於輸入的月份是按照我們理解的日期計算【1-12】月,而國外採用的是【0-11】月,所以需要減一
c.set(Integer.parseInt(s[0]), Integer.parseInt(s[1])-1,
Integer.parseInt(s[2]));
//列印結果,獲取時間
System.out.println("今天是"+s[0]+"的第" + c.get(Calendar.DAY_OF_YEAR) +
"天\t"+week[c.get(Calendar.DAY_OF_WEEK)-1]);
break;
}
}
/*
* 功能:判斷輸入的日期是不是合法,
* 輸入引數:接收年月日,int year,byte month,byte day
* 返回值:返回boolean型別資料,當輸入的值合法時,返回true,否則false
*
*/
public static boolean judgeDate(int year,int month,int day){
Calendar c = Calendar.getInstance();
//先判斷年份和月份是否合法
if(year>1900 && (month>=0 && month<12)){
//判斷是不是月小
if(month == 3 || month == 5 || month == 8 || month == 10){
// 如果月小的話,日期的時間限制為1-31
if(day>0 && day<31){
// 滿足要求,將年月日到設定為指定的日期(這裡為當前輸入的日期),並且結束輸入
c.set(year, month, day);
return true;
}
System.out.println("日期輸入錯誤1!");
//執行這句,則說明輸入的年、月都正確,但是輸入的日期不合法。
return false;
}
//判斷是不是月大
else if(month == 0 || month == 2 || month == 4 || month == 6 || month == 7 || month == 9 || month == 11){
// 如果月大的話,日期的時間限制為1-30
if(day>0 && day<32){
// 滿足要求,將年月日到設定為指定的日期(這裡為當前輸入的日期),並且結束輸入
c.set(year, month, day);
return true;
}
System.out.println("日期輸入錯誤2!");
//執行這句,則說明輸入的年、月都正確,但是輸入的日期不合法。
return false;
}
// 判斷本年是不是閏年,根據是不是閏年來確定day的值是不是合法
else if(month == 1){
// 設定當前的時間為三月一日,
c.set(year, month+1,1);
// 將時間往前推一天,就可以獲取本年二月的最大值
c.add(Calendar.DAY_OF_MONTH, -1);
// System.out.println(c.get(Calendar.DAY_OF_MONTH));
if(day>0 && day<c.get(Calendar.DAY_OF_MONTH)){
c.set(year, month, day);
return true;
}
System.out.println("日期輸入錯誤3!");
//執行這句,則說明輸入的年、月都正確,但是輸入的日期不合法。
return false;
}
}
System.out.println("日期輸入錯誤4!");
//執行這句,則說明輸入的年、月輸入錯誤。
return false;
}
}
執行效果
之前使用正規表示式實現這個功能的:地址:http://blog.csdn.net/lmh820822/article/details/43195677
相關文章
- python中實現輸入指定日期,判斷輸入日期這一天是星期幾Python
- javascript計算兩個時間日期相差的天數JavaScript
- excel日期加減計算方法 excel計算日期時間差Excel
- 幾個關於星期計算的方法(C#)C#
- YTUOJ-計算該日在本年中是第幾天(使用者自定義型別)型別
- sql server 計算兩個時間 相差的 幾天幾時幾分幾秒SQLServer
- js計算指定日期幾天前或者幾天後的日期JS
- Java日期時間API系列38-----一種高效的工作日計算計算方法JavaAPI
- 判斷一年中某一天是這一年的第幾天的函式介面函式
- oracle計算兩個日期的時間差時分秒Oracle
- Linux計算一天前的日期,一個小時前的時間等Linux
- php中計算時間差的幾種方法PHP
- js計算兩個日期相差的天數(不包含小時分鐘秒)JS
- 計算兩個時間日期相差的天數、分鐘數或者秒數
- javascript計算兩個日期相差的天數JavaScript
- Calendar:計算兩個日期相差的天數
- 判斷一週的某一天的函式介面函式
- php日期時間計算,轉載PHP
- JavaScript計算兩個日期相差天數JavaScript
- 使用函式計算自定義執行時快速部署一個 SpringBoot 專案 | 文末有禮函式Spring Boot
- JavaScript 計算兩個時間相差天數JavaScript
- Java程式設計:通過獲取當前時間,判斷今天星期幾Java程式設計
- Dynamics CRM使用計算欄位自動計算兩個時間欄位的天數差
- 計算本年使用者最大未登入時間段
- 基於函式計算自定義執行時快速部署一個 springboot 專案函式Spring Boot
- Flink實時計算pv、uv的幾種方法
- Java中計算兩個日期間的天數Java
- ORACLE 計算2個日期之間的天數Oracle
- 25:計算兩個日期之間的天數
- javascript 計算兩個日期間差的天數JavaScript
- Oracle計算兩個日期之間的天數Oracle
- 計算兩個日期相差的天數,Calendar用法
- 如何計算兩個時間間隔的天數
- 使用AWK計算某一列的所有數值和
- EditText監聽方法,實時的判斷輸入多少字元字元
- javascript如何計算兩個日期之間的時間間隔JavaScript
- js如何判斷一個方法是內建的還是自定義的JS
- JavaScript實時計算輸入文字框字元數量JavaScript字元