Comment vérifier si un Objet date est égale à hier?
Droit maintenant, je suis en utilisant ce code
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE) - 1, 12, 0, 0); //Sets Calendar to "yeserday, 12am"
if(sdf.format(getDateFromLine(line)).equals(sdf.format(cal.getTime()))) //getDateFromLine() returns a Date Object that is always at 12pm
{...CODE
Il y a obtenu d'être plus aisément, pour vérifier si la date de retour par getdateFromLine() est la date d'hier. Seulement la date, pas le temps. C'est pourquoi j'ai utilisé SimpleDateFormat.
Merci pour votre aide à l'avance!
Vous devez vous connecter pour publier un commentaire.
Cela fonctionnera aussi pour les dates comme 1er janvier.
java.time
, qui devrait être utilisé de préférence à joda-time,java.util.Date
, etjava.util.Calendar
: stackoverflow.com/a/33893147/1322243java.temps
À l'aide de
java.time
cadre intégré dans Java 8Officiel Oracle
LocalDate
tutoriel étatsSi vous travaillez avec des objets tels que
LocalDateTime
,ZonedDateTime
, ouOffsetDateTime
, vous pouvez convertirLocalDate
.ZoneId
LocalDate.now
plutôt que de s'appuyer implicitement sur la JVM actuelle du fuseau horaire par défaut. Cette valeur par défaut peut changer à tout moment, même en cours d'exécution. Comme ceci:LocalDate.now( ZoneId.of( "America/Montreal" ) )
Je suis d'accord avec les Cendres de Kim que le Joda-Time bibliothèque est la voie à suivre si vous voulez préserver votre santé mentale.
Dans cet exemple, si la date
day
est à partir d'hier, puisdayIsYesterday(day)
sera de retourtrue
.withTimeAtStartOfDay
.Éviter de java.util.Date & .Calendrier
La accepté de répondre à est techniquement correcte, mais moins qu'optimales. La java.util.La Date et l' .Calendrier des classes sont très gênants. Les éviter. Utiliser Joda-Time ou la nouvelle java.en temps (Java 8).
Fuseau Horaire
Fuseau horaire est critique en date du temps de travail. Si vous ignorez le problème, la JVM du fuseau horaire par défaut sera appliquée. Une meilleure pratique consiste à toujours spécifier plutôt que de compter sur par défaut. Même lorsque vous voulez par défaut, appeler explicitement
getDefault
.Le début de la journée est défini par le temps de la zone. Un nouveau jour se lève plus tôt à Berlin qu'à Montréal. Ainsi, la définition de "aujourd'hui" et "hier" nécessite un temps de zone.
Joda-Time
Exemple de code dans Joda-Time 2.3.
Une façon de déterminer hier, c'est par la conversion de LocalDate objets. Une autre façon, comme illustré ici, est de représenter "hier" comme une période de temps. Nous le définissons span aller dès le premier instant de la journée d'hier jusqu'à mais pas y compris le premier moment d'aujourd'hui. Cette approche est dite "semi-ouvertes" où le début est inclusive et la fin est exclusif.
De soustraire un jour pour aller à hier (ou le jour avant).
Convertir votre cible java.util.Date objet d'un Joda-Time DateTime objet. Appliquer un fuseau horaire à ce nouvel objet, plutôt que de compter sur l'application de la JVM du fuseau horaire par défaut. Techniquement, le fuseau horaire ici, dans ce cas n'est pas pertinent, mais y compris un fuseau horaire est une bonne habitude.
Test si la cible des terres de l'intérieur de l'intervalle d'hier.
Évidemment, cette approche avec la moitié de l'espace de temps fonctionne avec plus que juste "hier", comme "cette semaine", "le mois dernier", et ainsi de suite.
Mise à jour: La Joda-Time projet est maintenant en mode de maintenance. L'équipe conseille les migrations à la java.les classes de temps. Voir la java.le temps de solution dans le Réponse correcte en Przemek.
Au lieu de fixer le calendrier essayez ceci:
Cela devrait vous permettre d'aller de l'avant et vers l'arrière le long du calendrier
Alors vous pouvez simplement comparer les getDateFromLine(ligne) à la prevDate valeur ou ce que vous voulez.
Je vous recommande de considérer l'utilisation de Joda-Time. C'est flipper façon de mieux que le JDK offres.
J'ai trouvé ça un peu confondre lorsque j'utilise ce moyen de tester cette méthode
mes attentes est à imprimer 1999-12-31,mais le réel est 2001-1-31
Je suppose que le Calendrier.ajouter() ne traitent que de jour dans le mois.
Mais l'erreur est la façon dont je créer le Calendrier de l'objet.
Dans le Calendrier ,le mois de début avec 0,la variable est maintenant la valeur est 2001-2-1, j'étais si la vanité ne pas l'imprimer.quand j'ai trouvé quelque chose n'allait pas.
bonne façon de créer un Calendrier est :
Le Calendrier était si étrange pour un ex-programmeur C#: (
Quelque chose comme ça à peu près: