簡體   English   中英

如何在Java中比較兩個日期?

[英]How to compare between two dates in java?

向每位辛勤工作的開發人員致敬,

並為那里的每個奮斗者歡呼。

其實我在這里是因為我陷入了一個非常基本的問題。

我正在構建一個客戶端服務器應用程序,我對如何在從jtable提取的兩個日期之間進行比較感到困惑(最終,我通常從不對日期進行任何操作)。

我使用了以下代碼:

public static final String DATE_FORMAT_NOW = "yyyy-MM-dd";

  public static String now() {
   Calendar cal = Calendar.getInstance();
   SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
   return sdf.format(cal.getTime());

   }

 public static void ColorTheCell2(JTable jTable2){
          jTable2.getColumn("Date d'expiration").setCellRenderer(
    new DefaultTableCellRenderer() {

        @Override
    public Component getTableCellRendererComponent
    (JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){

    Calendar datetable=Calendar.getInstance();

    String date=value.toString();
    String day=""+date.substring(8).toString();
    String month=""+date.substring(5, 7).toString();
    String year=""+date.substring(0,4).toString();

   datetable.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
    Calendar curdate=Calendar.getInstance();

     String date1=now();
     String day1=""+date1.substring(8).toString();
     String month1=""+date1.substring(5, 7).toString();
     String year1=""+date1.substring(0,4).toString();
                curdate.set(Integer.parseInt(year1),Integer.parseInt(month1)+1,Integer.parseInt(day1));


            if(datetable.before(curdate)){

                setText(value.toString());
                setBackground(Color.red);
            }
            else{
                 setText(value.toString());
            }

return this;
 }
  });
    }

感謝您的時間。 最好的祝福

您不知道單元格中值的類型是什么。 如果它是一個字符串,則說明您做錯了:它應該是一個Date,並且渲染器應該使用DateFormat來渲染日期(除了設置適當的背景之外。例如,這將允許按時間順序對表進行排序而不是按字典順序。

如果已經是一個Date,則使用其compareTo方法將其與當前日期進行比較。

您的now()方法確實很奇怪,因為它似乎返回String而不是Date。 表示日期的適當類型是日期,而不是字符串。 每次需要使用日期作為字符串時,請使用日期並將其格式化為日期格式。 不要做相反的事情(每次需要一個Date時,都使用String並手動對其進行解析)。

看看Calendar類中的compareTo()

通常,我更喜歡將Joda Time API用於Java中與日期和時間相關的內容。

如果“ Object value值是Date類型,則將其強制轉換為Date

Date valDate = (Date) value;

或者,如果它是String則解析出Date -

Date valDate = new SimpleDateFormat("pattern in value").parse((String) value);

獲取當前日期-

Date currDate = new Date();

然后,您可以在Date類中使用以下任何一種方法-

  1. boolean after(Date when)
  2. boolean before(Date when)
  3. int compareTo(Date anotherDate)

例如

if(valDate.before(currDate)) {

    //...

API doc: DateSimpleDateFormat

Date實現Comparable接口,因此可以使用compareTo()方法在兩個日期之間進行比較。 Calendar相同,只需使用其compareTo()方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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