Вычитание дат и получение разницы в днях. Как их вычесть?

Кто-нибудь может сказать, как вычесть строку «после» из «сегодня», чтобы получить разницу в днях.

import java.text.*;
import java.util.*;


public class Main {
public static void main(String args[]){


SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
Calendar cal=Calendar.getInstance();
String today=sdf.format(cal.getTime());
System.out.println(today);
cal.add(Calendar.DATE, 20);
String After=sdf.format(cal.getTime());
System.out.println(After);

}
}

person Sharan Sondhi    schedule 11.11.2014    source источник
comment
stackoverflow.com/questions/13037654/subtract-two-dates -in-java кажется связанным с этим.   -  person WannaBeCoder    schedule 11.11.2014
comment
Пример использования JodaTime   -  person MadProgrammer    schedule 11.11.2014
comment
JodaTime AND Java 8 Time API пример   -  person MadProgrammer    schedule 11.11.2014
comment
@amitbhardwaj Я бы согласился, но это только половина вопроса...   -  person MadProgrammer    schedule 11.11.2014
comment
ваш код работает @WannaBeCoder спасибо   -  person Sharan Sondhi    schedule 11.11.2014
comment
Я удалил его из-за комментария @MadProgrammer. Я думаю, вы должны перепроверить и проверить, есть ли лучший способ.   -  person WannaBeCoder    schedule 11.11.2014
comment
@WannaBeCoder JodaTime или API времени Java 8   -  person MadProgrammer    schedule 11.11.2014
comment
конечно @WannaBeCoder, но мне нужно только приблизительное предположение .. но для тех, кому нужен точный результат, они не должны этого делать   -  person Sharan Sondhi    schedule 11.11.2014
comment
@MadProgrammer согласен, но ОП также не ясно, в чем разница между 8 марта 23:00 и 10 марта 2:00, он хочет, чтобы это было как 1 день, или реальная разница составляет 3 дня.   -  person amit bhardwaj    schedule 11.11.2014
comment
@amitbhardwaj К сожалению, именно здесь OP нужно будет использовать значения, возвращаемые Duration или Period, чтобы сделать свой выбор ... ;)   -  person MadProgrammer    schedule 11.11.2014
comment
@MadProgrammer, к сожалению, класс Period находится только в Java 8, поэтому, если он использует более раннюю версию, ему запрещено использовать Duration   -  person amit bhardwaj    schedule 11.11.2014
comment
@amitbhardwaj В JodaTime есть классы Period и Duration...   -  person MadProgrammer    schedule 11.11.2014


Ответы (4)


Было бы проще с java8, где вам не нужно вычитать длинные значения, представляющие дату, и возвращаться к дням, часам и минутам.

Date today= LocalDate.now();
Date futureDate = LocalDate.now().plusDays(1);
long days = Period.between(today, futureDate).getDays();

Period и LocalDate доступны в #java8

LocalDate документы

LocalDate — это неизменяемый объект даты и времени, который представляет дату, часто рассматриваемую как год-месяц-день. Другие поля даты, такие как день года, день недели и неделя года, также могут быть доступны. Например, значение «2 октября 2007 г.» может быть сохранено в LocalDate.


Если вы не используете java8, используйте библиотеку joda-time org.joda.time.Days утилита для расчета этого

Days day = Days.daysBetween(startDate, endDate);
int days = d.getDays();
person Subhrajyoti Majumder    schedule 11.11.2014
comment
Если вы согласны и хотите добавить пример с использованием JodaTime, я удалю свой ответ +1 вам - person MadProgrammer; 11.11.2014

Использование JodaTime, если у вас нет Java 8

String timeValue = "2014/11/11";
DateTimeFormatter parseFormat = new DateTimeFormatterBuilder().appendPattern("yyyy/MM/dd").toFormatter();
LocalDate startDate = LocalDate.parse(timeValue, parseFormat);
LocalDate endDate = startDate.plusDays(20);

System.out.println(startDate + "; " + endDate);

Period p = new Period(startDate, endDate);
System.out.println("Days = " + p.getDays());
System.out.println("Weeks = " + p.getWeeks());
System.out.println("Months = " + p.getMonths());

Какие выходы...

2014-11-11; 2014-12-01
Days = 6
Weeks = 2
Months = 0
person MadProgrammer    schedule 11.11.2014

попробуй это...

Пусть это поможет вам.

import java.util.Date;
import java.util.GregorianCalendar;

// compute the difference between two dates.

public class DateDiff {
  public static void main(String[] av) {
    /** The date at the end of the last century */
    Date d1 = new GregorianCalendar(2010, 10, 10, 11, 59).getTime();

    /** Today's date */
    Date today = new Date();

    // Get msec from each, and subtract.
    long diff = today.getTime() - d1.getTime();

    System.out.println("The 21st century (up to " + today + ") is "
        + (diff / (1000 * 60 * 60 * 24)) + " days old.");
  }
}
person Rafi Ullah Afridi    schedule 11.11.2014

Это может Вам помочь..

SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
    Calendar cal=Calendar.getInstance();
    String today=sdf.format(cal.getTime());
    System.out.println(today);

    cal.add(Calendar.DATE, 20);
    String After=sdf.format(cal.getTime());
    System.out.println(After);

    Date d1 = null;
    Date d2 = null;

    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

    try {
        d1 = format.parse(today);
        d2 = format.parse(After);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    long diff = d2.getTime() - d1.getTime();

    long diffDays = diff / (24 * 60 * 60 * 1000);

    System.out.println("Difference is "+diffDays+" Days");
person SonalPM    schedule 11.11.2014
comment
Нет, никогда не делай этого. Существует много различий в том, как работает дата / время (високосные годы, границы века и тысячелетия), чтобы просто вычесть миллисекундные смещения двух дат. - person MadProgrammer; 11.11.2014