Deutsch English Français
Dein Feedback:
Hat die Seite Deine Erwartung erfüllt? vote3 Ja
vote2 Teilweise
vote1 Nein
Noch ein Kommentar?

Nur falls, Du eine Antwort erwartest, Deine E-Mailadresse

Gegebenenfalls noch Dein Name

Do not change this:
Feedback
Suchen

Homepage von Thorsten Gunkel

Willkommen auf meiner Seite. Die offizielle Adresse dieser Seite lautet: http://www.tgunkel.de.
Thorsten Gunkel

Über diese Seite

Die allererste Version dieser Seite ging am 14. März 2000 online. Damals, Netscape 4.7 war ein aktueller (und richtig schlechter) Browser, Google den meisten noch völlig unbekannt, entstand der erste Vorläufer dieser Seite als eine Liste von Lesezeichen auf dem Uniwebserver.

Seit damals habe ich auf der Seite diverse Technologien ausprobiert und nebenbei zahlreiche (meist IT bezogene) Informationen abgelegt.

Über positives wie negatives Feedback freue ich mich natürlich jederzeit.

Aktuelles

  • 2014-09-28

  • 2013-09-18

    • Java Date vs Timestamp
      Mit dem Datum kann man in Java viel Spaß haben. Angenommen man hat zwei Datumsobjekte
      long time1=1376639746195L;
      java.util.Date date1;
      java.util.Date date2;

      Eines davon ist wirklich vom Typ Date, das andere ein Timestamp (ein Erbe von Date)
      date1=new java.util.Date(time1);
      date2=new java.sql.Timestamp(time1);

      Das ist keine künstliche Situation, das passiert z.B. schnell wenn man ein Datum per Hibernate in einer Datenbank persistiert und wieder ausliest.
      Beide zeigen auf exakt dieselbe Uhrzeit und sind sogar equal
      date1.getTime(); // 1376639746195
      date2.getTime(); // 1376639746195
      date1.equals(date2); // true

      Was passiert wohl, wenn man beide vergleicht?
      date1.compareTo(date2); // 1

      Die ersten der beiden gleichen Daten ist also größer!
      (equals) ... is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.

      Testen wir doch mal
      date1.equals(date2); // true
      date2.equals(date1); // false

      Die Ursache ist offenbar, dass die Genauigkeit von Timestamp eigentlich nicht genau genug für Millisekunden ist. Also entfernen wir im Date doch auch mal die Millisekunden (die letzten 3 Stellen)
      long time2=1376639746000L;
      date1=new java.util.Date(time2);

      Und schon findet compareTo, dass beide gleich sind.
      date1.getTime(); // 1376639746000
      date2.getTime(); // 1376639746195
      date1.compareTo(date2); // 0

      Aber sind sie eigentlich trotz der abweichenden getTime() Werte noch equals?
      date1.equals(date2); // false
      date2.equals(date1); // false

      Es hilft hier nur, in beiden den Millisekundenanteil zu streichen. Kleiner Auszug aus dem JavaDoc von compareTo()
      It is strongly recommended, but not strictly required that (x.compareTo(y)==0) == (x.equals(y)).
  • 2012-09-22

  • 2012-07-22

  • 2012-02-19

Mehr Ankündigungen ...
Mehr Einträge aus meinem Blog ...
29-09-2014 01.28
Powered by PHP Created with Xemacs Valid XHTML 1.0! Valid CSS!