2012-12-17 6 views
0

Je suis en train d'écrire une méthode qui prendra une LocalDateTime et un DateTime (en utilisant Joda 1.3) et déterminer si elles sont dans les 30 minutes les uns des autres. Voici le meilleur que je peux trouver, mais je sais il doit y avoir un meilleur/plus propre/façon plus efficace:Joda LocalDateTime et DateTime à portée

public boolean isWithin30MinsOfEachOther(LocalDateTime localDateTime, DateTime dateTime) { 
    return (
     localDateTime.getYear() == dateTime.getYear() && 
     localDateTime.getMonthOfYear() == dateTime.getMonthOfYear() && 
     localDateTime.getDayOfMonth() == dateTime.getDayOfMonth() && 
     localDateTime.getHourOfDay() == dateTime.getHourOfDay() && 
     Math.abs((localDateTime.getMinuteOfHour() - dateTime.getMinuteOfHour())) <= 30 
    ); 
) 

Sans parler, je ne pense pas que cela fonctionne si, par exemple, localDateTime est Le 31 décembre 2012 23:58:00 et dateTime est le 1er janvier 2013 00:01:00. Même chose avec le début/la fin de deux mois et jours différents. Aucune suggestion? Merci d'avance.

Répondre

1

Avez-vous essayé d'utiliser la classe Duration?

À titre d'exemple:

Duration myDuration=new Duration(localDateTime.toDateTime(), dateTime); 
    return Math.abs(myDuration.getMillis())<=30*60*1000; 
+1

Merci @Tomas Narros, mais cela est Joda 1.3 et 'getStandardMinutes' n'est pas disponible dans l'API. En outre, je ne peux pas simplement mettre à jour vers une version plus moderne, je suis coincé avec 1.3. – IAmYourFaja

+0

Et si j'utilisais 'getMillis()' à la place et que je le divisais par 1 000? – IAmYourFaja

+1

@HeineyBehinds vrai, le fixant. Vérifiez mon édition s'il vous plaît (division par 60 et par 1000, ou plus clair, convertissant 30 à millis se multipliant pour 60 et 1000) ... –

0

Vous pouvez essayer

return Math.abs(localDateTime.getLocalMillis() 
       - dateTime.toLocalDateTime().getLocalMillis()) < 30 * 60 * 1000; 
Questions connexes