2011-04-29 11 views
1
私は、クライアントが、彼は次の3日間の情報を望んでいると言うデータベースクエリを作成する必要が
public Date getCurrentDay() { 
    Calendar cal = Calendar.getInstance(); 
    Date date = java.sql.Date.valueOf( 
      cal.get(cal.YEAR) + ":" + 
      cal.get(cal.MONTH) + ":" + 
      cal.get(cal.DATE)); 
    return date; 
} 

、ここに現在の日付を取得するための私の方法は、次のX日で取得するので、私は、今日の情報を得ることができますが、とき私のクライアントは次の3日間を望んでいます。どのように次のX日を取得するのですか?のJava/PostgreSQLは

答えて

1

あなたのクライアントはJavaである場合は、あなただけ先に現在の時刻の日数を取得するためのヘルパーメソッドを作ることができます。:

public Date getDaysAheadCurrentDate(int numberOfDaysAhead) { 
    if (numberOfDaysAhead <= 0) { 
     throw new IllegalArgumentException("The number of days ahead must be a positive integer."); 
    } 
    Calendar cal = Calendar.getInstance(); 
    // add the number of days before creating the java.sql.Date instance. 
    cal.add(Calendar.DATE, numberOfDaysAhead); 
    Date date = java.sql.Date.valueOf( 
      cal.get(Calendar.YEAR) + ":" + 
      cal.get(Calendar.MONTH) + ":" + 
      cal.get(Calendar.DATE)); 
    return date; 
} 
+0

'cal.addことに注意してください(Calendar.DATE、 - 1) 'も昨日の日付を取得するのに有効です。したがって、最初のチェックは "getDaysAheadCurrentDate"の暗黙のセマンティクスを遵守するために必要なだけです(先に進むことを前提としています)。 – Thomas

+0

正しいThomas ...質問の著者によって記述された要件が "days ahead current time"であるため、このメソッドはパラメータnumberOfDaysAheadが正の数であるかどうかを確認します:) –

3

cal.add(cal.DATE, 3);に電話して、3日後に同じ時刻になることができます。

次のような方法で行うことができます:

public Date getDaysFromNow(int days) { 
    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.DATE, days); 
    Date date = java.sql.Date.valueOf( 
     cal.get(cal.YEAR) + ":" + 
     cal.get(cal.MONTH) + ":" + 
     cal.get(cal.DATE)); 
    return date; 
} 

public Date getCurrentDay() { 
    return getDaysFromNow(0); 
} 

編集:あなたも0までの時間を設定し、getTimeInMillis(呼び出すことができることを

注)、すなわち

public Date getDaysFromNow(int days, boolean endOfDay) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.HOUR_OF_DAY, endOfDay ? 23 : 0); 
    cal.set(Calendar.MINUTE, endOfDay ? 59 : 0); 
    cal.set(Calendar.SECOND, endOfDay ? 59 : 0); 
    cal.set(Calendar.MILLISECOND, endOfDay ? 999 : 0); 

    cal.add(Calendar.DATE, days); 
    Date date = new java.sql.Date(cal.getTimeInMillis()); 
    return date; 
} 

endOfDayパラメータは、時間を23:59:59,999に設定するために使用され、同じ方法で今日の2つの日付、つまり2011-29-04 00:00:00,000と​​を取得できます。

2

postgresではnow()を使用して現在時刻を取得できます。文字列式を使用して+ 3日を取得することができます。

これらの式は、postgresクライアントで再生できます。

SELECT now() + '3 days'