我正試圖創建一個日歷類,在其中初始化一個默認日期。當用戶創建該類時,默認的建構式將分配值 "01-01-2012"。如果用戶輸入一個有效的日期作為字串引數,第二個建構式將分配新的日期。如果不是,我希望這個類能給出一個友好的警告,這不是一個有效的日期,并繼續保持默認分配。這將拋出警告并繼續創建實體,同時將默認值設定為 "01-01-2021")。我還創建了一個方法來設定日期,所以一旦他們給出一個有效的日期,就可以改變這個日期。我應該如何在第二個建構式中做到這一點?或者有什么更好的更有效的方法來完成這個任務?
import java.time.*;
import java.time.format.DateTimeFormatter;
public class CalendarDate {
private String date;
private DateTimeFormatter formatter = DateTimeFormatter。 ofPattern("MMMMM dd uuuu")。
//constructor sets date to January 1, 2012.
CalendarDate(){
date = "01-01-2012"。
};
/****
* 初始化物件的選擇日期
*
* @param day - 初始化日期
* @param month - 初始化月份
* @param year - 初始化年份
*/
public CalendarDate(String date){
this.date = date。
} //1 - 引數構造器。
/***
*
*設定新的日期給這個物件
*
* @param date 為物件設定新的日期
*/
public void setDate(String date){
this.date = date。
}
/**。
*
*回傳物件設定的日期。
*
* @return 回傳設定的日期。
*/
public String getDate(){
LocalDate getDate = LocalDate.parse(date)。
String formattedDate = getDate.format(formatter)。
return formattedDate。
}
/***。
*
*回傳物件的日期
*
* @return 回傳物件的日期
*/
public String getNextDate()/span>{
LocalDate dateTime = LocalDate.parse(date)。
LocalDate returnValue = dateTime.plusDays(1)。
String newNextDate = formatter.format(returnValue)。
return newNextDate。
}
/**。
*從物件的給定日期回傳先前的日期。
*
* @return */ */從物件的給定日期回傳先前的日期。
*/
public String getPriorDate(){
return " "/span>。
}
/**。
*回傳物件給定日期中的星期幾。
*
*@return
*/
public String getDayOfWeek()/span>{
return " "/span>。
}
}
public class Calendar extends CalendarDate{
public static void main(String[] args){
CalendarDate testDate = new CalendarDate("06-07-1992") 。
testDate.getDate()。
}
}
這就是我目前的情況,我想使用LocalDate和DateTimeFormatter。任何東西都會有幫助。
uj5u.com熱心網友回復:
在DateTimeFormatter中指定的格式必須與輸入字串相匹配,例如:
import java.time.LocalDate。
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args){
String strDate = "01-01-2012"。
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-uuuu"/span>, Locale.ENGLISH)。
LocalDate date = LocalDate.parse(strDate, dtf)。
System.out.println(date)。
//以自定義格式輸出。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd uuuu"/span>, Locale.ENGLISH)。
String formatted = formatter.format(date)。
System.out.println(formatted)。
}
}
輸出:
2012-01-01
1月 01 2012
。
從現代日期時間API*了解更多關于Trail: 日期時間.
* 出于任何原因,如果你必須堅持使用Java 6或Java 7,你可以使用ThreeTen-Backport,它將大部分的java.time功能回傳到Java 6 & 7。如果您正在為一個 Android 專案作業,而您的 Android API 水平仍然不符合 Java-8 的要求,請查看通過脫ugaring 提供的 Java 8 API和如何在 Android 專案中使用 ThreeTenABP。
uj5u.com熱心網友回復:
我為你的設計提供以下建議。我認為他們也會修復你的錯誤,作為一個副作用,如果你有一個錯誤的話。
private String date;
不要把你的日期保留為一個字串。把它保持為一個LocalDate物件。就像你把數字放在int變數中,把Booelan值放在boolean變數中,而不是字串。所以宣告變成:
private LocalDate date;
這顯然意味著我們將不得不改變你的方法中的大部分代碼。
CalendarDate(){
date = "01-01-2012"/span>;
};
在上面的建構式中,你可以使用of的LocalDate的工廠方法之一。舉例來說:
date = LocalDate.of(2012, Month.JANUARY, 1)。
你已經得到:
* @param day - 初始化 day
@param month - 初始化月份
@param year - 初始化年份
看來你的Javadoc引數與你的建構式在這里并不一致,你需要修正它們。
public CalendarDate(String date){
this.date = date。
} //1 - 引數構造器。
有一個接受String引數的建構式可能很方便。在你的Javadoc注釋中,記得要提到字串的預期格式。因為我現在已經把date改成了LocalDate,你需要在賦值給date之前決議這個字串。我建議你讓任何DateTimeParseException從方法中傳播出去,這樣用戶就會知道決議是否出錯。同時在你的Javadoc檔案中說明該方法可能會拋出:
* DateTimeParseException
* 如果該字串不符合預期的格式或不表示有效的日期
進一步:
public void setDate(String date){
又是一個可能很方便的方法,現在需要對字串進行決議。并在適當的時候拋出一個例外。
public String getDate(){
LocalDate getDate = LocalDate.parse(date)。
String formattedDate = getDate.format(formatter)。
return formattedDate。
}
你現在可以將上述方法簡化一些,因為它不再需要決議日期,只需要對其進行格式化。至少還有一個方法也是如此。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/312764.html
標籤:
