sql >> Database >  >> RDS >> Oracle

Datumverschil in datum in Oracle en Java

De datum kan hetzelfde zijn, maar de tijd kan anders zijn. Resulterend in 139 dagen wanneer u door milliseconden rekent. (java)

Ik raad aan om geen millis te gebruiken, maar de dagen te gebruiken om te berekenen.

Iets als

public long daysBetween(Calendar startDate, Calendar endDate) {
   Calendar date = (Calendar) startDate.clone();
   long daysBetween = 0;
   while (date.before(endDate)) {
      date.add(Calendar.DAY_OF_MONTH, 1);
      daysBetween++;
   }}

of

/**
     *
     * @param c1 from
     * @param c2 to
     * @return amount of days between from and to
     */
    public int diff(Calendar c1, Calendar c2) {
        int years = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
        if (years == 0) {
            return c2.get(Calendar.DAY_OF_YEAR) - c1.get(Calendar.DAY_OF_YEAR);
        } else {
            Calendar endOfYear =  Calendar.getInstance();
            endOfYear.set(Calendar.YEAR, c1.get(Calendar.YEAR));
            endOfYear.set(Calendar.MONTH, 11);
            endOfYear.set(Calendar.DAY_OF_MONTH, 31);
            int days = endOfYear.get(Calendar.DAY_OF_YEAR) - c1.get(Calendar.DAY_OF_YEAR);
            for (int i=1;i <years;i++) {
                endOfYear.add(Calendar.YEAR, 1);
                days += endOfYear.get(Calendar.DAY_OF_YEAR);
            }
            days += c2.get(Calendar.DAY_OF_YEAR);
            return days;
        }
    }

Kanttekening:het eerste voorbeeld is iets langzamer dan het tweede, maar als het alleen om kleine verschillen gaat, is het verwaarloosbaar.



  1. SQL Server Besturingssysteemfout 5:5 (Toegang is geweigerd.)

  2. SELECTEER elke werknemer met een hoger salaris dan het GEMIDDELDE van zijn afdeling

  3. PostgreSQL:lopende telling van rijen voor een zoekopdracht 'per minuut'

  4. Hoe kan ik meerdere kolommen SELECTEREN binnen een CASE WHEN op SQL Server?