2012-07-01 9 views

risposta

8

Utilizzare questa:

new Duration(dt1, dt2).isShorterThan(Duration.millis(maxTolerance)) 
5

Questo post è vecchio, ma trovo la linea nella soluzione accettata un po 'lungo e ho trovato niente di meglio in ciò che esiste. Così ho fatto una piccola classe che avvolge per Data e DateTime:

public class DateTimeUtils 
{ 
    public static boolean dateIsCloseToNow(Date dateToCheck, 
              Duration tolerance) 
    { 
     return dateIsCloseToNow(new DateTime(dateToCheck), tolerance); 
    } 

    public static boolean dateIsCloseToNow(DateTime dateToCheck, 
              Duration tolerance) 
    { 
     return datesAreClose(dateToCheck, DateTime.now(), tolerance); 
    } 

    public static boolean datesAreClose(Date date1, 
             Date date2, 
             Duration tolerance) 
    { 
     return datesAreClose(new DateTime(date1), new DateTime(date2), tolerance); 
    } 

    public static boolean datesAreClose(DateTime date1, 
             DateTime date2, 
             Duration tolerance) 
    { 
     if (date1.isBefore(date2)) { 
      return new Duration(date1, date2).isShorterThan(tolerance); 
     } 
     return new Duration(date2, date1).isShorterThan(tolerance); 
    } 

quindi questa linea:

new Duration(date.getTime(), System.currentTimeMillis()).isShorterThan(Duration.standardSeconds(5) 

diventa:

DateUtils.dateIsCloseToNow(date, Duration.standardSeconds(5)) 

ho scoperto che veramente utile in casi di test di unità dove dovevo convalidare una data di creazione.

+2

Sembra molto utile. La mia unica critica è piccola, sulla denominazione: cambierei il nome da 'data ...' a 'datetime ...' (come 'datetimesAreEqual' piuttosto che 'datesAreEqual'), solo per evitare confusione con il nome errato 'java .util.Date' e con 'LocalDate'. Potrei anche dire "AreClose" piuttosto che "AreEqual" e "IsCloseToNow" piuttosto che "IsNow". –

+0

"IsClose" potrebbe essere più chiaro. Per il DateTime, non ne sono sicuro. Poiché entrambi i metodi accettano Data e DateTime come parametri, penso che Data sia più chiaro. Sebbene, la classe potrebbe essere rinominata in DateTimeUtils. Modifico il post – FredBoutin

Problemi correlati