簡體   English   中英

Java 構造函數日期集

[英]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 等等

嗯,你告訴我。 你想發生什么? 以下是一些常用選項:

  1. (推薦):規定顯然不可能存在的給定日期不是構造函數的合法調用。 換句話說, new Date(32, 2, 2051)無效。 為此,請拋出異常。 例如:

     if (day > 31) throw new IllegalArgumentException("Days must be between 1 and 31, inclusive");
  2. 使用翻轉行為,並將年份四舍五入。 這是一種“我不在乎,做一些事情沒有意義,只是不要崩潰”的態度,不推薦。 例如,您可以將上述日期設為 2051 年 3 月 4 日。

  3. 你選擇的其他東西。 畢竟你是程序員。

請注意,您正在重新發明一個非常常見的輪子,因此,除非這是家庭作業或純粹的學習練習(“純粹”的意思是:一旦您完成此代碼,此代碼將被扔進垃圾桶),這是一個錯誤. 使用LocalDate代替。

注意:日期很難 比你想象的更難。

您不必為保存日期信息創建日期屬性。 您可以只使用 java 8 LocalDateDate 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM