2012-02-10 117 views
-1

我將有2個日期,即開始日期和結束日期。我要計算的日期兩者結合,然後是持續時間應該有以下三個條件必須檢查所有的時間 -Java日期持續時間驗證

  1. 如果持續時間等於(1年+ - 5天),然後打印「Hello」。
  2. 如果持續時間小於(1年-5天),則打印「Hi」。
  3. 如果持續時間大於(1年+ 5天),則打印「Hi」。

請幫助我,讓我知道是否有任何其他信息是必需的。

我更喜歡使用joda time api。持續時間計算相當簡單。我有問題把條件驗證與所有上述3條件。無論如果條件我放在我的程序是不正確的,似乎。

import org.joda.time.DateTime; 
import org.joda.time.Period; 

class Test { 

    public static void main(String[] args) { 
     DateTime d1 = new DateTime(2011, 1, 1, 0, 0, 0, 0); 
     DateTime d2 = new DateTime(2012, 1, 1, 0, 0, 0, 0); 
     Period p1 = new Period(d1, d2); 
     if (p1.getYears()==1 && p1.getMonths()==0 && 
       (p1.getDays()<5||p1.getDays()>5)) { 
      System.out.println("Hello"); 
     } else { 
      System.out.println("Hi"); 
     } 
    } 
} 

在此先感謝。

+0

最後兩個條件似乎滑稽。 – 2012-02-10 12:39:57

+0

那有什麼好笑的。如果持續時間低於和高於所述時間段,則應執行一些邏輯,否則應該執行一些其他邏輯。 – rahul 2012-02-10 13:05:28

+0

抱歉,沒有傷害的意思。 – 2012-02-10 13:45:30

回答

2

用戶以下類,它有一個daysBetween方法,您可以使用它來計算天數。

public class DateDifference { 
public static void main(String args[]){ 
DateDifference difference = new DateDifference(); 
} 
DateDifference() { 
Calendar cal1 = new GregorianCalendar(); 
Calendar cal2 = new GregorianCalendar(); 

cal1.set(2008, 8, 1); 
cal2.set(2008, 9, 31); 
System.out.println("Days= "+daysBetween(cal1.getTime(),cal2.getTime())); 
} 
public int daysBetween(Date d1, Date d2){ 
return (int)((d2.getTime() - d1.getTime())/(1000 * 60 * 60 * 24)); 
} 
} 

我不認爲你需要幫助了,除非你不知道有多少天在一年在那裏,你不就沒怎麼在java中使用if...else塊。

+0

如果您只是檢查兩個日期之間有少於360天或超過370天,您沒有考慮閏年。 「1年+ 5天」這段時間的長短取決於它是否是閏年。 – Jesper 2012-02-10 14:43:16

0

您必須注意,1年的持續時間並不總是固定的,因爲有些年份有365天,其他日期有366天。因此,您不能簡單地計算沒有考慮閏年的日期之間的天數;這並不總是會導致正確的結果。

我會做這樣的:

DateTime start = d1.plusYears(1).minusDays(5); 
DateTime end = d1.plusYears(1).plusDays(5); 

if (d2.isBefore(start)) { 
    System.out.println("Difference between d1 and d2 is less than 1 year - 5 days"); 
} else if (d2.isAfter(end)) { 
    System.out.println("Difference between d1 and d2 is more than 1 year + 5 days"); 
} else { 
    System.out.println("Difference is more than or equal to 1 year + 5 days " + 
         "and less than or equal to 1 year - 5 days"); 
} 
+0

謝謝Jesper。你的解決方案真的有用 – rahul 2012-02-13 05:18:53

+0

用我的最終程序更新問題部分。 – rahul 2012-02-13 05:20:51

0

我者優先使用約達時間的API。持續時間計算相當簡單。我有問題把條件驗證與所有上述3條件。無論如果條件我放在我的程序是不正確的,似乎。

import org.joda.time.DateTime; 
import org.joda.time.Period; 

class Test { 

public static void main(String[] args) { 
    DateTime d1 = new DateTime(2011, 1, 1, 0, 0, 0, 0); 
    DateTime d2 = new DateTime(2012, 1, 1, 0, 0, 0, 0); 
    Period p1 = new Period(d1, d2); 
    if(p1.getYears()==1 && p1.getMonths()==0 && 
    (p1.getDays()<5||p1.getDays()>5)){ 
    System.out.println("Hello"); 
    }else{ 
    System.out.println("Hi"); 
       } 

} 

}

這裏是我的程序,它可以作爲我的期望 -

import org.joda.time.DateTime; 

class Test { 

public static void main(String[] args) { 
    DateTime d1 = new DateTime(2011, 1, 1, 0, 0, 0, 0); 
    DateTime d2 = new DateTime(2012, 1, 1, 0, 0, 0, 0); 
    DateTime start=d1.plusYears(1).minusDays(5); 
    DateTime end=d1.plusYears(1).plusDays(5); 
    if(d2.isBefore(start)||d2.isAfter(end)){ 
     System.out.println("HI"); 
    }else{ 
     System.out.println("HELLO"); 
    } 

} 

}