En supposant que vous obteniez l'heure actuelle dans heure de Joda :
DateTime now = new DateTime();
Comment calculez-vous les valeurs pour les variables dateTimeAtStartOfToday
et dateTimeAtEndOfToday
?
Ce que j'essaie de faire, c'est générer du SQL pour faire une recherche de toutes les transactions qui ont eu lieu entre les startOfToday
et endOfToday
.
J'utiliserais:
LocalDate today = now.toLocalDate();
LocalDate tomorrow = today.plusDays(1);
DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone());
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone());
Ensuite, vérifiez si startOfToday <= time < startOfTomorrow
pour une heure donnée.
Bien sûr, cela dépend en partie de ce qui est stocké dans la base de données et du fuseau horaire qui vous intéresse.
Cela fonctionne mieux, il s'avère que DateTime a une méthode appelée toInterval qui effectue exactement cette opération (calcule de minuit à minuit). Dans mes tests, il semble ne pas avoir de problème avec les transitions DST.
DateTime now = new DateTime();
DateTime startOfToday = now.toDateMidnight().toInterval().getStart();
DateTime endOfToday = now.toDateMidnight().toInterval().getEnd();
System.out.println( "\n" + now + "\n" + startOfToday + "\n" + endOfToday + "\n" );
JODA a l'air d'être très bien pensé.
if((sinceDate.getDayOfYear() == now.getDayOfYear()) && (sinceDate.year() == now.year()))
//yep, do something today;
travaille pour moi.
import org.joda.time.DateTime;
import org.joda.time.DateTimeMidnight;
DateTime dateTimeAtStartOfToday = new DateTime(new DateTimeMidnight());
DateTime dateTimeAtEndOfToday = new DateTime((new DateTimeMidnight()).plusDays(1));
En tant que fonction d'extension Kotlin, elle ressemble à ceci:
fun DateTime.isOnSameDay(timeOnDayToCheck: DateTime) =
timeOnDayToCheck.toLocalDate().toInterval(this.zone).contains(this)
Cela ne contient pas d'heures égales à end du jour (le début est inclus), alors ajoutez peut-être un "ou" -case avec interval.getEnd().isEqual(this))
.
Cela marche...
DateTime dt = new DateTime();
DateMidnight dtStartDate = dt.toDateMidnight();
DateMidnight dtEndDate = dt.plusDays( 1 ).toDateMidnight();
System.out.println( dt + "\n" + dtStartDate + "\n" + dtEndDate );
... mais en ce qui concerne le code SQL, j'ai tendance à utiliser BETWEEN comme clause where plutôt que de faire les trucs> et <=