2010-03-22 3 views
1

J'utilise ce qui suit pour trouver le début et la fin de plusieurs périodes dans Joda. Le petit diable sur mon épaule gauche dit que c'est le chemin à parcourir ... mais je ne le crois pas.Trouver début et fin d'année/mois/jour/heure

Est-ce que quelqu'un avec une certaine expérience joda pourrait jeter un coup d'œil et me dire que le petit gars a raison?

(Il ne sera utilisé que pour les objets datetime UTC)

Merci!

/* Year */ 
private static DateTime endOfYear(DateTime dateTime) { 
    return endOfDay(dateTime).withMonthOfYear(12).withDayOfMonth(31); 
} 

private static DateTime beginningOfYear(DateTime dateTime) { 
    return beginningOfMonth(dateTime).withMonthOfYear(1); 
} 

/* Month */ 
private static DateTime endOfMonth(DateTime dateTime) { 
    return endOfDay(dateTime).withDayOfMonth(dateTime.dayOfMonth().getMaximumValue()); 
} 

private static DateTime beginningOfMonth(DateTime dateTime) { 
    return beginningOfday(dateTime).withDayOfMonth(1); 
} 

/* Day */ 
private static DateTime endOfDay(DateTime dateTime) { 
    return endOfHour(dateTime).withHourOfDay(23); 
} 

private static DateTime beginningOfday(DateTime dateTime) { 
    return beginningOfHour(dateTime).withHourOfDay(0); 
} 

/* Hour */ 
private static DateTime beginningOfHour(DateTime dateTime) { 
    return dateTime.withMillisOfSecond(0).withSecondOfMinute(0).withMinuteOfHour(0); 
} 

private static DateTime endOfHour(DateTime dateTime) { 
    return dateTime.withMillisOfSecond(999).withSecondOfMinute(59).withMinuteOfHour(59); 
} 
+2

Avez-vous essayé d'écrire des tests jUnit? –

+0

Je cherche un moyen plus simple que ça, ça me semble un peu gênant. Mais cela fonctionne, même pour certains cas de coin. – reto

+1

Je pense que vous devez inverser les opérations pour endOfYear. Il semble que 2/2/10 vous donnerait une date du 28/12/10. Du point de vue XP/TDD, avez-vous besoin de toutes ces méthodes de début/fin? Si tout ce dont vous avez besoin est le début et la fin de l'année et du mois, mettez-le en œuvre. Si vous trouvez plus tard que vous avez besoin de jour et d'heure, vous pouvez les ajouter. Très probablement, vous n'aurez pas besoin de tous. Et moins de code signifie moins de place pour les bogues à cacher. –

Répondre

1

Joda ne fournit DateMidnight et LocalDate qui pourraient alléger avoir à traiter avec des heures et des minutes tant sur les cas où vous vraiment ne se soucient que des limites de la journée. LocalDate implémente également l'interface ReadablePartial, et il peut être utile de chercher à faire d'autres implémentations de celles qui reflètent les champs d'intérêt.

+0

Les classes et les méthodes de minuit sont déconseillées dans Joda-Time. Remplacé par la méthode [withTimeAtStartOfDay'] (http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay--). –

0

Je sais que les bibliothèques Java sont basées sur 0 (ie Janvier est 0, Décembre est 11). Je ne pense pas que Joda l'est, mais si vous n'êtes pas sûr de vérifier cela.

+0

Non, Joda-Time (et java.time) utilisent des nombres ordinaux sains avec 1-12 pour Janvier-Décembre. –

Questions connexes