Datum vergelijking met “isBefore” in Java Joda Time

Is er een manier om alleen de data vergeleken voor DateTime object met isBefore functie?

Voor ex.,

DateTime start = new DateTime(Long.parseLong(<someInput>));
DateTime end   = new DateTime(Long.parseLong(<someInput>));

Nu als ik dat doe,

while (start.isBefore(end)) { 
   //add start date to the list
   start = start.plusDays(1);
}  

Dit resulteert in een inconsistente gedrag (voor mijn scenario) zoals het is met inachtneming van de in die tijd en overwegende dat wat ik wil is gewoon de data vergeleken met isBefore. Is er een manier waarop ik dat kan doen?

Laat het me weten.

Bedankt!

InformationsquelleAutor test123 | 2012-03-07

 

5 Replies
  1. 21

    Als u wilt vergelijken data alleen wilt u waarschijnlijk de LocalDate klasse, in plaats van een DateTime.

    De JodaTime documenten zijn vrij goed: http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html

    • Bedankt voor het antwoord. Ik wil opslaan DateTime binnen de lus dus in plaats van het omzetten DateTime te LocalDate en dan zetten LocalDate terug te DateTime ik denk dat het een beter idee om het gebruik van DateFormatter.
    • Maar zorg ervoor dat u geen raar gedrag bij het betreden/verlaten van de zomertijd! Data en tijden zijn vaak lastiger dan ze voor het eerst verschijnen…
    • Ik heb net opnieuw geëvalueerd van de use cases voor mijn toepassing en het lijkt erop dat ik beter af zou zijn met LocalDate. Bedankt!
    • Slechts voor een verduidelijking. Uw opmerking over het gebruik van de LocalDate in plaats van een DateTime. Is er een probleem of overhead met DateTime..?
    • Nee. de enige reden dat ik suggereerde LocalDate was dat de vraag is specifiek gevraagd over het vergelijken van onderdelen van datum. Met behulp van DateTime is prima, maar het is voor de modellering van een ander concept. Het is belangrijk om de juiste te kiezen voor uw behoeften.
  2. 9

    Een andere strategie is voor de opmaak.

    DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
    DateTime newStart = df.parse(start);
    DateTime newEnd = df.parse(end);
    
    while (newStart.isBefore(newEnd)) { 
      //add start date to the list
      newStart = newStart.plusDays(1);
    }    
    • Dit is het meest dicht bij wat ik wil. Bedankt voor de suggestie!
    • Probeer df.parse(start.toString());
    • Ik zal overschakelen naar LocalDate.
  3. 1

    Overschakelt naar het gebruik van LocalDate dan DateTime. Het concept in JodaTime is een ‘gedeeltelijke’ (zie de ReadablePartial interface).

    • Bedankt voor het antwoord. Ik wil opslaan DateTime formaat binnen de lus. Dus ik denk dat ik de stok met wat George hieronder voorgesteld. Bedankt!
  4. 1

    Dit is een oude vraag, maar de moeite waard het toevoegen van een antwoord! Joda-tijd is het niet aanbevolen deze dagen gezien hebben we een geweldige steun in Java 8 voor date-time operaties. Als u nog steeds gebruik van joda time-gebruik vervolgens de compareTo methode in LocalDate klasse.

    Vergelijkt dit gedeeltelijk met een ander retourneert een geheel getal, met vermelding van de
    bestelling. De velden zijn vergeleken in volgorde, van de kleinste tot de grootste. De
    eerste veld dat is niet gelijk aan wordt gebruikt om het resultaat te bepalen.

    Het opgegeven object moet een gedeeltelijke aanleg waarvan de veldtypen
    overeenkomen met die van deze ‘gedeeltelijk’.

    Officiële Java-doc kan worden gevonden hier.

  5. 0

    Je kan de tijd instellen voor de DateTime op nul (dat betekent middernacht) na ontleding:

    //withTime sets hours, minutes, seconds, milliseconds
    DateTime start = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
    DateTime end   = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);

    Of gebruik één van de andere Joda Time klassen; er is veel meer dan DateTime! Als je te maken hebt met data alleen, zult u waarschijnlijk wilt gebruiken LocalDate in plaats van DateTime.

    • Bedankt voor het antwoord! Na het bekijken meer nauw aan bij mijn verzoek, ik denk dat ik zal het veranderen LocalDate in plaats van de Datum en tijd. Bedankt!
    • Het instellen van de tijd om middernacht zal niet werken als de tijd-zone heeft de zomertijd hiaten die behoren middernacht. Bellen dayOfMonth().roundFloorCopy() behandelt de rand van het geval.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *