it-swarm.com.de

minus 1 Stunde nach DateTime mit Joda Time

Ich möchte nur 1 Stunde von einem DateTimesubtrahieren. Ich habe versucht, ihn bei Google nachzuschlagen. Dabei stellte ich fest, dass es eine Methode namens minus gibt, die eine Kopie des Datums und eine bestimmte Dauer verwendet: http: // www. joda.org/joda-time/apidocs/org/joda/time/DateTime.html#minus(long)

Aber ich weiß nicht, wie ich es verwenden soll, und ich kann kein Beispiel im Internet finden.

Hier ist mein Code:

String string1 = (String) table_4.getValueAt(0, 1);
    String string2= (String) table_4.getValueAt(0, 2);

    DateTimeFormatter dtf = DateTimeFormat.forPattern("hh:mm a").withLocale(Locale.ENGLISH);
    DateTime dateTime1 = dtf.parseDateTime(string1.toString());
    DateTime dateTime2 = dtf.parseDateTime(string2.toString());

    final String oldf = ("hh:mm a");
    final String newf= ("hh.mm 0");
    final String newf2= ("hh.mm a");
    final String elapsedformat = ("hh.mm");

    SimpleDateFormat format2 = new SimpleDateFormat(oldf);
    SimpleDateFormat format2E = new SimpleDateFormat(newf); 

    Period timePeriod = new Period(dateTime1, dateTime2);

    PeriodFormatter formatter = new PeriodFormatterBuilder()

     .appendHours().appendSuffix(".")
     .appendMinutes().appendSuffix("")
     .toFormatter();

    String elapsed = formatter.print(timePeriod);

    table_4.setValueAt(elapsed,0,3);

    DecimalFormat df = new DecimalFormat("00.00");
    System.out.println(dateTime1);
    table_4.setValueAt("", 0, 4);
    table_4.setValueAt("", 0, 5);

Beispieldaten:

    dateTime1: 08:00 AM
    dateTime2: 05:00 PM

der Zeitraum beträgt 9 Stunden. aber ich möchte, dass es 8 stunden ist, nur weil ich die mittagspause in meinem programm abziehen möchte.

ich habe es mit diesem blöden Code versucht:

dateTime1.minus(-1) 

Ich habe auch versucht, string1 zu parsen, um es zu verdoppeln, damit ich es um eins subtrahieren kann.

double strindtoD = Integer.parseInt(string1);

Ich habe auch versucht, einen anderen DateTimezu erstellen und Punkt zu verwenden, um die Differenz der beiden Zeiten zu ermitteln

String stringOneHour = ("01:00 AM");
DateTime dateTime3 = dtf.parseDateTime(stringOneHour.toString());
Period timePeriod = new Period(dateTime3, dateTime1);
15
Maguzu

Benutz einfach:

dateTime.minusHours(1)

Dies ist in der API dokumentiert .

Beachten Sie, dass DateTime-Objekte unveränderlich sind , sodass die Operation alleine keine Auswirkung hat. Sie müssen das Ergebnis dieser Methode einem neuen Objekt zuweisen (oder sich selbst ersetzen):

dateTime = dateTime.minusHours(1);

Um aus der Differenz zweier Periodname__s einen DateTimezu erhalten, müssen Sie zunächst einen Intervaldurchgehen:

Period period = new Interval(begin, end).toPeriod();

Link zu einem SO Beitrag, der erklärt, warum es sowohl Periodals auch Intervalgibt.

Randnotiz: Joda Time verwendet VIELE Indirektionen in seiner API. Für das Lesen des Javadoc muss nicht nur eine Methode für eine Klasse gelesen werden, sondern es muss auch die Liste der geerbten Methoden aller geerbten abstrakten Klassen gelesen werden./Schnittstellen, zum Beispiel, ein DateTimeist auch ein ReadableInstantname__. Man gewöhnt sich daran, aber es ist ein Kinderspiel.

39
fge

Wenn Sie eine ältere Version von org.joda.time.DateTime verwenden, können Sie die Methode minus (ReadablePeriod period) wie diese verwenden

        Date date = LocalDate.now().minus(new Period(1, 0, 0, 0)).toDate();

dabei akzeptiert Period int Stunden, int Minuten, int Sekunden und int Millis-Parameter

0
Lance Reid