[英]Java Constructor date set
如何使用構造函數設置日期?
public Date(int day, int month, int year)
{
this.day=day; // set day to 1-31
this.month=month; // set month to 1-12
this.year=year; // set year to 1900-9999
}
如果我使用
if(day<=1 || day >=31)
this.day=day;
else if(month<=1 || month>=12)
this.month=month;
else if(year<=1900 || year>=9999)
this.year=year
問題是,如果我這樣做,它只會導致 0 但是如果我刪除了條件語句,那一天將接受到 32 並且幾個月將被接受 13 等等
嗯,你告訴我。 你想發生什么? 以下是一些常用選項:
(推薦):規定顯然不可能存在的給定日期不是構造函數的合法調用。 換句話說, new Date(32, 2, 2051)
無效。 為此,請拋出異常。 例如:
if (day > 31) throw new IllegalArgumentException("Days must be between 1 and 31, inclusive");
使用翻轉行為,並將年份四舍五入。 這是一種“我不在乎,做一些事情沒有意義,只是不要崩潰”的態度,不推薦。 例如,您可以將上述日期設為 2051 年 3 月 4 日。
你選擇的其他東西。 畢竟你是程序員。
請注意,您正在重新發明一個非常常見的輪子,因此,除非這是家庭作業或純粹的學習練習(“純粹”的意思是:一旦您完成此代碼,此代碼將被扔進垃圾桶),這是一個錯誤. 使用LocalDate代替。
注意:日期很難。 比你想象的更難。
您不必為保存日期信息創建日期屬性。 您可以只使用 java 8 LocalDate或Date API 。 LocalDate 是線程安全且不可變的,是處理日期用例的最推薦方式。 如果您堅持創建自己的 Date 類,您可以輕松地執行以下操作。
import java.time.*;
public class Date {
final LocalDate date;
public Date(int day, int month, int year) {
date = LocalDate.of(year, month, day);
}
public int getYear() {
return date.getYear();
}
public Month getMonth() {
return date.getMonth();
}
public int getDay() {
return date.getDayOfMonth();
}
}
使用日期類。
public class Main {
public static void main(String[] args) {
try{
Date date1 = new Date(2020, 13, 33);
} catch(DateTimeException ex){
System.out.println("Invalid input");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.