2016-07-18 8 views
-2

Ich möchte die Differenz zwischen zwei Daten erhalten, deren Eingangsparameter wenn ein beliebiges Eingabedatum übergeben, dann sollte es konvertieren in JJJJ -mm-dD HH: mm: ssWie zu unterscheiden zwischen zwei Daten, deren Datum Zeittyp JJJJ-MM-TT hh: mm: ss

Date1: 2016-05-30 20:16:00


Date2: 2016.05.29 20.17: 00

public long totalHour(Date startDate, Date endDate) { 

      int diffInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000 * 60 * 60 * 24)); 

     return diffInDays; 
    } 

Ich verwende diesen Code aber nicht in der Lage Output in integer Form zu erhalten mir bitte dabei helfen.

Antwort

1

Der klassische Weg, um den Unterschied zwischen zwei Daten in Java zu berechnen ist:

  1. sie
  2. konvertierten beide zu Date Objekten analysieren zu „Millisekunden seit der UNIX-Epoche“ von Date.getTime()
  3. Aufruf
  4. von einander subtrahieren.
  5. durch eine Konstante teilen, um von Millisekunden in die Zeiteinheit zu konvertieren, die Sie benötigen.

Ihr Code scheint tun das, aber es gibt ein paar Probleme zu:

  1. die Konstante falsch
  2. Sie auf ein int sind Kürzen, die geeignet ist, dass Sie Fehler zu geben, wenn die beiden Daten sind weit genug auseinander.

Dies wäre besser:

public long hoursDifference(Date start, Date end) { 
    return ((end.getTime() - start.getTime())/(1000 * 60 * 60)); 
} 

Auch Sie könnten Rundung statt Abschneiden zu betrachten.


Parsing Daten in einem beliebigen Format ist unmöglich ... es sei denn, Sie a priori, was das erwartete Format oder Formaten kennen sind. In diesem Fall probieren Sie einfach nacheinander die Formate aus, bis Ihre Analyse erfolgreich ist. Zum Beispiel so etwas.

SimpleDateFormat[] sdf = new SimpleDateFormat[] { 
    new SimpleDateFormat(/* format 1 */), 
    new SimpleDateFormat(/* format 2 */), 
    ... 
    }; 

    ... 

    Date date = null; 
    for (int i = 0; i < sdf.length && date == null; i++) { 
     try { 
      date = sdf[i].parse(dateString); 
     } catch (ParseException ex) { /* */ } 
    } 
    if (date == null) { 
     /* report parse error ... */ 
    } 

Aber Vorsicht, Sie werden nicht in der Lage sein, jedes mögliche Datumsformat korrekt zu behandeln. Zum Beispiel werden Sie nicht in der Lage sein, 7/6/2000 (Englisch 7. Juni 2000) vom 7.6.2000 (6. Juli 2000) zu unterscheiden.

IMO, Sie sind besser dran, geben Sie dem Benutzer einen Date chooser einer Art.


...aber ich möchte Datenformat ist wie dieser jjjj-mm-tt hh: mm: ss

Die Datumsformatstrings werden in der javadocs für SimpleDateFormat dokumentiert. Lesen Sie die Dokumentation und Sie werden es herausfinden können. Und Sie können herausfinden, wie Sie auch andere Formate parsen können!

+0

Bitte sagen Sie mir Lösung coz ich wirklich neu in Android und Java – user971035

+0

Datum startdatum = null; Datum endatedate = null; SimpleDateFormat sdf = neues SimpleDateFormat ("yyyy-MM-dd"); versuchen Sie {startdate = sdf.parse (Sdate); endatedate = sdf.parse (Edate); } catch (ParseException e) {neue RuntimeException auslösen ("Fehler beim Parsen des Datums:", e); } Ich habe parse, aber das Datum kommt wie folgt So 29. Mai 20:16:00 IST 2016 @Stephen C – user971035

+0

das ist ok Lieber aber ich will Datenformat ist wie dieses JJJJ-MM-TT hh: mm: ss bitte helfen Sie mir dabei – user971035

Verwandte Themen