odejmowanie dat

0

Witam. Stworzyłem za pomocą paru różnych źródeł coś takiego jak poniżej, teraz pytanko, jak zrobić różnicę pomiędzy datą systemową (czyli aktualną) i jakąś podaną?

package samples;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class ObliczanieDat {

    public static long diffInDays3(Date d1, Date d2)
    {
      return Math.round((d1.getTime() - d2.getTime()) / 86400000.0);
    }

    public static void main(String args[]){

        SimpleDateFormat  dateFormat = new SimpleDateFormat("yyyy, MM, dd");
        Calendar calendar = Calendar.getInstance();
        String timeString = dateFormat.format(calendar.getTime());
        //tu wyświetlam poprostu aktualną datę
        System.out.println(timeString);

          Calendar c1 = Calendar.getInstance();
          Calendar c2 = Calendar.getInstance();

          c1.set(2008, 2, 29);
          c2.set(2008, 2, 31);

          //a tu odejmowanie tych dat co są powyżej :) teraz staram się połączyć to z systemową tą wyżej :)
          //pozdrawiam :)
          System.out.println(diffInDays3(c2.getTime(), c1.getTime()));

    }

    }
0

takie cusik powinno Ci wystarczyć

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class ObliczanieDat {

    public static long diffInDays3(Date d1, Date d2)
    {
      return Math.round((d1.getTime() - d2.getTime()) / 86400000.0);
    }

    public static void main(String[] args) {

        int a,b,c;
        //SimpleDateFormat  dateFormat = new SimpleDateFormat("yyyy, MM, dd");
        SimpleDateFormat  dateFormat = new SimpleDateFormat("yyyy");
        SimpleDateFormat  dateFormat1 = new SimpleDateFormat("MM");
        SimpleDateFormat  dateFormat2 = new SimpleDateFormat("dd");
        Calendar calendar = Calendar.getInstance();

        String timeString = dateFormat.format(calendar.getTime());
        String timeString1 = dateFormat1.format(calendar.getTime());
        String timeString2 = dateFormat2.format(calendar.getTime());

        a = Integer.parseInt(timeString);
        b = Integer.parseInt(timeString1);
        c = Integer.parseInt(timeString2);

        //tu wyświetlam poprostu aktualną datę
        //System.out.println(timeString);

          Calendar c1 = Calendar.getInstance();
          Calendar c2 = Calendar.getInstance();

          //c1.set(2008, 2, 29);
          c1.set(a, b, c);
          c2.set(2008, 2, 31);

          //a tu odejmowanie dat 
          System.out.println(diffInDays3(c2.getTime(), c1.getTime()));

    }

}
0

Dzięki wielkie :-)
Jeszcze takie małe cuś, może się komuś przyda :-)


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

/**
 * DateDiff -- 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(2000, 11, 31, 23, 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.");
  }
}
0

Koncepcja byłaby poprawna, gdyby każda doba miała 24h, a tak nie jest. Przejście z czasu letniego na zimowy i odwrotnie komplikuje sprawę (doba ma wtedy 25 lub 23h)... Czyli w niektórych przypadkach, wskazane rozwiązania nie zadziałają poprawnie.

0
pskora napisał(a)

Dzięki wielkie :-)
Jeszcze takie małe cuś, może się komuś przyda :-)

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

/**

  • DateDiff -- 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(2000, 11, 31, 23, 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.");
      }
      }

W przypadku jeżeli .getTime() zwróci bigint to java się pomyli i źle policzy nam tą różnicę więc powinno to wyglądać mniej więcej tak
BigInteger.valueOf(d1.getTime()).subtract(BigInteger.valueOf(d2.getTime())).divide(BigInteger.valueOf(86400000));

0

czy weryfikowaliście różnicę dni przy przejściu z zimowego czasu na letni?

0

Kod jest wolniejszy, ale niewrażliwy na wszelkie zmiany czasu i duże liczby:

        GregorianCalendar first = ...
        GregorianCalendar second = ...
        int n = 0;
        if(first.compareTo(second)<0)
        {
            while(first.compareTo(second)<0)
            {
                n++;
                first.add(Calendar.DAY_OF_MONTH,1);
            }
       }
       else
       {
            while(first.compareTo(second)>0)
            {
                n--;
                first.add(Calendar.DAY_OF_MONTH,-1);
            }
       }

Zmienna n zawiera różnicę dat w dniach.

0

Wątek z cyklu siłowania się nad wyważaniem otwartych drzwi... :)

@GośćBart
Zadania dla osób uznających, że nierówne doby uniemożliwiają liczenie różnicy timestampa i przeliczenie jej na standardowe doby (86400s).

  1. Ile dni w roku może mieć nierówną dobę wg UT?
  2. Jaka jest maksymalna możliwa nierówność takiego roku w sekundach?
  3. Jaka jest dokładna szansa, żeby z różnicy timestampa między dwoma dniami po 01.01.1970 r. n.e. z samych sekund przestępnych uzbierała się cała doba, czyli 86400 sekund?
    4: W którym roku Kalendarza Gregoriańskiego różnica wg timestampa między dwiema datami mogłaby teoretycznie osiągnąć 1 dobę standardową?
    5: Czy gdyby timestamp był liczony od najstarszej daty znanej cywilizacji człowieka (np. 10000 r. p.n.e), to odpowiedzi na pytania 3 i 4 różniłyby się istotnie?

Odpowiedzi (pod "błędem"): <ort>ad.1. 1 dzień (31. grudnia), ad.2. 2 sekundy w ostatniej minucie roku, ad.3. 0, ad.4. Rok 45170 n.e., ad.5. Nie</ort>

0

http://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat tak ciekawostkowo wrzucę. W czerwcu będziemy mieli ekstra sekundę. @Olamagato i w ten to prosty sposób mamy ekstra jeden dzień dłuższy niż pozostałe ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0