Как найти количество дней между двумя датами в java или groovy?

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

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

но я хочу, чтобы ex, 9th feb 2011 to 19th feb 2011 должен возвращать мне 11 дней независимо от второго или миллисекундного рассмотрения. Как я могу достичь этого?

Ответ 1

Для решения groovy, которое вы просили, вы должны использовать это:

use(groovy.time.TimeCategory) {
   def duration = date1 - date2
   println "days: ${duration.days}, Hours: ${duration.hours}"
}

Это очень легко понять и чрезвычайно читаемо. Вы попросили пример, как это можно использовать в простом методе, который вычисляет дни между двумя датами. Итак, вот ваш пример.

class Example {

    public static void main(String[] args) {
        def lastWeek = new Date() - 7;
        def today = new Date()

        println daysBetween(lastWeek, today)
    }

    static def daysBetween(def startDate, def endDate) {
        use(groovy.time.TimeCategory) {
            def duration = endDate - startDate
            return duration.days
        }
    }
}

Если вы запустите этот пример, он напечатает вам 7. Вы также можете улучшить этот метод, используя before() и after(), чтобы включить инвертированные даты.

Ответ 2

Это хорошо изношенная строка, но для Dates используйте JodaTime.

Здесь, как рассчитать интервалы времени с использованием JodaTime.

Days days = Days.daysBetween(new DateTime(millis1), new DateTime(millis2));
int daysBetweenDates = days.getDays();

Ответ 3

  GregorianCalendar cal1 = new GregorianCalendar(2011,2,9); 
  GregorianCalendar cal2 = new GregorianCalendar(2011,2,19); 
  long ms1 = cal1.getTime().getTime(); 
  long ms2 = cal2.getTime().getTime(); 
  long difMs = ms2-ms1; 
  long msPerDay = 1000*60*60*24; 

  double days = difMs / msPerDay;

Ответ 4

просто проанализируйте 9th feb 2011 и 19th feb 2011 в датах, используя SimpleDateFormat и преобразуйте его в начало и конец миллиса и примените свои вычисления

Ответ 5

Это предполагает время в UTC или GMT.

long day1 = milliseconds1/ (24 * 60 * 60 * 1000);
long day2 = milliseconds2/ (24 * 60 * 60 * 1000);
// the difference plus one to be inclusive of all days
long intervalDays = day2 - day1 + 1; 

Ответ 6

Попробуйте следующее:

DateFormat format = DateFormat.getDateTimeInstance();
    Date completeDate=null;
    Date postedDate=null;

    try
    {
        completeDate = format.parse("18-May-09 11:30:57");
        postedDate = format.parse("11-May-09 10:46:37");
        long res = completeDate.getTime() - postedDate.getTime();

        System.out.println("postedDate: " + postedDate);
        System.out.println("completeDate: " + completeDate);
        System.out.println("result: " + res + '\n' + "minutes: " + (double) res /  (60*1000) + '\n' 
            + "hours: " + (double) res /  (60*60*1000) + '\n' + "days: " + (double) res /  (24*60*60*1000));
    }
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Если вы хотите, чтобы дни были целыми числами, просто удалите кастинг в двойное. НТН

Ответ 7

Date.metaClass.calculateDays = { Date offset = new Date() ->            
    Long result = null
    Date date = delegate
    use(groovy.time.TimeCategory) {
        result = (offset - date).days as Long
    }            
    result            
}

пример использования:

def sdf = new java.text.SimpleDateFormat("yyyy.MM.dd")

sdf.lenient = false

Date date = sdf.parse("2015.10.02")

println date.calculateDays() 

println date.calculateDays(sdf.parse("2015.11.02"))

Ответ 8

В groovy все, что вам нужно, это:

date2 - date1

который возвращает целое число, представляющее количество дней между двумя датами.

Или если вам нужно защитить от отмены порядка между двумя экземплярами Date (операция возвращает отрицательные числа, когда первый операнд находится раньше второго):

Math.abs(date2 - date1)

В приведенных выше примерах используется оператор groovy date.minus(date), который возвращает количество дней между двумя датами.

Пример groovy сеанс оболочки:

$ groovysh
Groovy Shell (2.4.8, JVM: 1.8.0_111)
Type ':help' or ':h' for help.

groovy:000> x = new Date(1486382537168)
===> Mon Feb 06 13:02:17 CET 2017

groovy:000> y = new Date(1486000000000)
===> Thu Feb 02 02:46:40 CET 2017

groovy:000> x - y
===> 4

или если вам нужен метод:

int daysBetween(date1, date2) {
    Math.abs(date2 - date1)
}

Ответ 9

Узнайте количество дней между двумя датами:

@Test

public class Demo3 {

    public static void main(String[] args) {
        String dateStr ="2008-1-1 1:21:28";
        String dateStr2 = "2010-1-2 1:21:28";
        SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        SimpleDateFormat format2 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        try {
            Date date2 = format.parse(dateStr2);
            Date date = format.parse(dateStr);

            System.out.println("distance is :"+differentDaysByMillisecond(date,date2));
        }catch(ParseException e ){
            e.printStackTrace();
        }
    }

//get Days method

    private static int differentDaysByMillisecond(Date date, Date date2) {
        return (int)((date2.getTime()-date.getTime())/1000/60/60/24);
    }

}