Вопрос по date, java – Как вычесть n дней из текущей даты в Java? [Дубликат]

32

This question already has an answer here:

How to subtract X days from a date using Java calendar? 9 answers

Я хочу вычесть n дней из текущей даты в Java.

Как я могу это сделать?

Ваш Ответ

5   ответов
6

Я нашел это идеальное решение и может быть полезным, вы можете напрямую получить в формате, как вы хотите:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -90); // I just want date before 90 days. you can give that you want.

SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); // you can specify your format here...
Log.d("DATE","Date before 90 Days: " + s.format(new Date(cal.getTimeInMillis())));

Благодарю.

48

это вычтет десять дней текущей даты (до Java 8):

int x = -10;
Calendar cal = GregorianCalendar.getInstance();
cal.add( Calendar.DAY_OF_YEAR, x);
Date tenDaysAgo = cal.getTime();

Если вы используете Java 8, вы можете воспользоваться новой датой & amp; Время API (http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html):

LocalDate tenDaysAgo = LocalDate.now().minusDays(10);

Для преобразования новых типов в старые и наоборот смотрите:Преобразование между java.time.LocalDateTime и java.util.Date

Спасибо, Корген !!! Senthil Kumar
В чем разница междуCalendar.DAY_OF_YEAR а такжеCalendar.DATE ? Оба дают мне результат.
72

Вам не нужно использовать Календарь. Вы можете просто играть с отметками времени:

Date d = initDate();//intialize your date to any date 
Date dateBefore = new Date(d.getTime() - n * 24 * 3600 * 1000 l ); //Subtract n days   

UPDATE НЕ ЗАБУДЬТЕ ДОБАВИТЬ & lt; l & quot; долго к концу 1000 года.

Пожалуйста, обратите внимание на следующее ПРЕДУПРЕЖДЕНИЕ:

Добавление1000*60*60*24 Миллисекунды к дате Java время от времени прибавляют ноль дней или два дня к исходной дате в условиях високосных секунд, перехода на летнее время и тому подобного. Если вам нужно быть на 100% уверенным, что добавлен только один день, это решение не подходит.

Этот способ не обрабатывает переход на летнее время. Если вы пересечете дату, когда время изменится, то время будет выключено на + - 1 час.
Еслиn большое (& gt; 24), вам нужно убедиться, что значение оценивается какlong так как значение будет слишком большим дляint
Чистый путь - это путь @Korgen, а не этот
Спасибо Houcem Berrayana !!! Senthil Kumar
Будьте осторожны, это может не сработать, например, при работе с високосными годами:stackoverflow.com/a/1006388/32453
1

for future use find day of the week ,deduct day and display the deducted day using date.

public static void main(String args[]) throws ParseException {

String[] days = { "Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday" };
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
Date dt1 = format1.parse("20/10/2013");

Calendar c = Calendar.getInstance();
c.setTime(dt1);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
long diff = Calendar.getInstance().getTime().getTime() ;
System.out.println(dayOfWeek);

switch (dayOfWeek) {

case 6:
    System.out.println(days[dayOfWeek - 1]);
    break;
case 5:

    System.out.println(days[dayOfWeek - 1]);
    break;      
case 4:
    System.out.println(days[dayOfWeek - 1]);
    break;
case 3:

    System.out.println(days[dayOfWeek - 1]);
    break;
case 2:
    System.out.println(days[dayOfWeek - 1]);
    break;
case 1:

    System.out.println(days[dayOfWeek - 1]);

     diff = diff -(dt1.getTime()- 3 );
     long valuebefore = dt1.getTime();
     long valueafetr = dt1.getTime()-2;
     System.out.println("DATE IS befor subtraction :"+valuebefore);
     System.out.println("DATE IS after subtraction :"+valueafetr);

     long x= dt1.getTime()-(2 * 24 * 3600 * 1000);
     System.out.println("Deducted date to find firday is - 2 days form Sunday :"+new Date((dt1.getTime()-(2*24*3600*1000))));
     System.out.println("DIffrence from now on is :"+diff);
        if(diff > 0) {

            diff = diff / (1000 * 60 * 60 * 24);
            System.out.println("Diff"+diff);
            System.out.println("Date is Expired!"+(dt1.getTime() -(long)2));
        }

    break;
}
}
-1

Как говорит @Houcem Berrayana

Если вы хотели бы использоватьn>24 тогда вы можете использовать код как:

Date dateBefore = new Date((d.getTime() - n * 24 * 3600 * 1000) - n * 24 * 3600 * 1000); 

Предположим, вы хотите найти дату последних 30 дней, а затем используете:

Date dateBefore = new Date((d.get,Time() - 24 * 24 * 3600 * 1000) - 6 * 24 * 3600 * 1000); 
Я не вижу добавленной стоимости этого ответа. [а] Это повторяет математику, приведенную вaccepted Answer, [b] Обеспечивает плохое решение, игнорируя часовые пояса и переход на летнее время. Если я упускаю суть, то, возможно, вам следует добавить дополнительную дискуссию к ответу.

Похожие вопросы