Java / Postgresql получить следующие X дней - PullRequest
1 голос
/ 29 апреля 2011
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;
}

Мне нужно сделать запрос к базе данных, где КЛИЕНТ говорит, что ему нужна информация о следующих 3 днях, вот мой метод получения текущего дня, поэтому я могу получить текущую информацию, но когда мой клиент хочет следующие 3 днякак я могу сделать запрос.Как мне получить следующие X дней?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Вы можете позвонить 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);
}

Edit:

Обратите внимание, что вы также можете установить время на 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, таким образом, вы можете получить две даты на сегодня: 2011-29-04 00:00:00,000 и 2011-29-04 23:59:59,999 одним и тем же методом.

2 голосов
/ 29 апреля 2011

В postgres вы можете использовать now () для получения текущего времени.Затем вы можете использовать строковое выражение, чтобы получить + 3 дня.

Вы можете поиграть с этими выражениями в клиенте postgres.

SELECT now() + '3 days'
1 голос
/ 29 апреля 2011

Если ваш клиент на 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...