Vérifier si un moment donné se trouve entre deux temps, peu importe la date
J'ai timespans:
Chaîne time1 = 01:00:00
Chaîne time2 = 05:00:00
Je veux vérifier si time1 et time2 les deux se situe entre 20:11:13 and 14:49:00
.
En fait, 01:00:00
est plus grand que 20:11:13
et moins de 14:49:00
considérant 20:11:13
est toujours inférieure à 14:49:00
. C'est compte tenu des préalables.
Donc ce que je veux dire, c'est 20:11:13 < 01:00:00 < 14:49:00
.
Donc j'ai besoin de quelque chose comme ça:
public void getTimeSpans()
{
boolean firstTime = false, secondTime = false;
if(time1 > "20:11:13" && time1 < "14:49:00")
{
firstTime = true;
}
if(time2 > "20:11:13" && time2 < "14:49:00")
{
secondTime = true;
}
}
Je sais que ce code ne donne pas de résultat correct, comme je suis en comparant les objets string.
Comment faire, car ils sont les timespans mais pas les chaînes de caractères à comparer?
- Comment cela peut-il jamais être vrai sans tenir compte d'une date? Si une heure est supérieure à 20:11:13, le cas ne peut pas être inférieure à 14:49:00.
- Désolé de ne pas être clair. En fait,
01:00:00
est plus grand que20:11:13
et moins de14:49:00
considérant20:11:13
est toujours inférieure à14:49:00
. C'est compte tenu des préalables. - Si vous donnez le format HH:MM:SS, alors
01:00:00
n'est pas supérieure à20:11:13
le même jour, et20:11:13
n'est jamais inférieur à14:49:00
. Si vous essayez de déterminer si le moment est entre20:11:13
sur un jour et14:49:00
le jour suivant, alors vous aurez besoin d'introduire une date dans vos comparaisons. - N'est-il pas possible sans tenir compte de la date parce que
20:11:13
est toujours inférieure à14:49:00
? - 20 > 14, n'est-il pas? donc
20:11:13
est plus grand que14:49:00
. "11 minutes avant le 3 dans l'après-midi" n'est pas plus tard que "11 minutes après 8 heures du soir" sur le même jour. Ce qui me manque? - Je pense que je l'obtenir... si la comparaison est 20h à 21h puis 21:30 échoue.. si sa 20h 19:59 alors tous les temps passer..
- ma réponse est donc beaucoup plus facile. et je soupçonne qu'il s'exécute tas plus rapide. Je ne veux pas être arrogant, mais de prendre un coup d'oeil.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Calendar
de la classe afin de vérifier.Par exemple:
20:11:13
et14:49:00
. Ce que je veux, c'est de vérifier si01:00:00
est entre20:11:13
et14:49:00
.01:00:00
est plus grand que20:11:13
et moins de14:49:00
considérant20:11:13
est toujours inférieure à14:49:00
. C'est compte tenu des préalables. Donc, ce que je veux dire, c'est20:11:13 < 01:00:00 < 14:49:00
. Votre code est en considérant le même jour et donc pas de travail.23:00:00
. Vous avez besoin d'avoir une date, ou vous avez besoin de vérifier que le temps est entre20:11:13
et24:00:00
ou entre00:00:00
et14:49:00
calendar2.add(Calendar.DATE, 1);
d'autre pas ?Date currentTime = new SimpleDateFormat("HH:mm:ss").parse("00:00:00"); Calendar calendar = Calendar.getInstance(); calendar.setTime(currentTime); calendar.add(Calendar.DATE, 1);
. Permettez-moi de vérifier complète.MM/dd/yyyy HH:mm:ss
java.util.Date
,java.util.Calendar
, etjava.text.SimpleDateFormat
sont maintenant héritage, supplantée par la java.temps les classes intégré dans Java 8 et les versions ultérieures. Voir Tutoriel par Oracle.checkes whether the current time..
je veux vérifier l'heure manuellement passé en tant que paramètre. est-il vérifier de temps courant de la journée, ou d'une vérification manuelle passé timeString?tl;dr
java.time.LocalTime
La java.les classes de temps comprennent
LocalTime
pour représenter un temps de jour seulement, sans date et sans un fuseau horaire.Nous avons d'abord définir les limites. Votre les chaînes d'entrée arriver à respecter la norme ISO 8601 formats. La java.les classes de temps utiliser le format ISO 8601 formats par défaut, donc pas besoin de spécifier le format.
Et de définir notre scénario de test, la cible
01:00:00
.Maintenant, nous sommes ensemble jusqu'à comparer ces
LocalTime
objets. Nous voulons voir si la cible est après le temps plus tard, mais avant le temps plus tôt. Que signifie milieu de la nuit, dans ce cas, environ entre 8 H et 3 h le lendemain matin.Que le test peut être plus simplement déclaré que “pas entre 3 heures et 8 heures”. On peut ensuite généraliser à n'importe quelle paire de
LocalTime
objets où nous les testons pour entre si le départ intervient avant l'arrêt avec une horloge de 24 heures, et pas entre si le départ intervient après l'arrêt (comme dans le cas de cette Question).De plus, les intervalles de temps sont généralement traités avec la Demi-approche Ouverte où le début est inclusive alors que la fin est exclusif. Ainsi, un "entre" la comparaison, à proprement parler, serait “cible est égale à ou plus tard que le début ET la cible est avant de s'arrêter”, ou plus simplement, est la cible pas avant le départ ET avant l'arrêt”.
Si le début est après l'arrêt, à l'intérieur d'une horloge de 24 heures, alors que nous voulons la logique suggérée dans la Question (est après 8 H, mais avant 3 heures du matin).
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.La réponse donnée par @kocko ne fonctionne que chez la même journée.
Si l'heure de début "23:00:00" et à la fin "02:00:00"[le jour suivant] et temps actuel est "01:30:00" alors le résultat sera faux...
J'ai modifié le @kocko la réponse de fonctionne parfaitement
Sortie
(J'ai inclus valeur de limite inférieure à [valeur limite supérieure-1])
Modifié @Surendra Jnawali code. Il ne parvient pas
si l'heure actuelle est 23:40:00 je.e de plus que l'heure de début et moins égal à 23:59:59.
Tout le crédit va à la véritable propriétaire
C'est comment il devrait être :Cela fonctionne parfaitement
RÉSULTAT
De plus, pour être plus précis,
Si vous comparez un temps entre un intervalle de plus de 00:00 à 24:00 de la journée,
vous devez analyser la journée.
Il y a beaucoup de réponses ici, mais je tiens à donner un nouveau qui est similaire avec Le basilic Bourque réponse mais avec un exemple de code. Merci donc de voir la méthode ci-dessous:
Soit si vous êtes à l'appel de cette méthode à l'aide de:
Ou à l'aide de:
Le résultat sera:
Api26+
.Me semble que votre problème est une situation OU... Vous voulez vérifier si time1 > 20:11:13 OU time1 < 14:49:00.
Il n'y aura jamais une fois de plus à 20:11:13-delà de votre portée grâce à l'autre extrémité (14:49:00), et vice-versa. Il pense que si vous êtes à la vérification que le temps n'est PAS entre un bien ordonné couple de l'horodatage.
À l'aide de LocalTime voudrais simplement ignorer la valeur de Date:
Clock.systemUTC()
comme c'est la valeur par défaut quand aucun argument n'est passé. Utilisez simplement:Instant.now()
.Instant.now
avec les autres classes’.now
méthodes qui ne sont, en effet, utiliser la JVM actuelle du fuseau horaire par défaut si ce paramètre est omis.Méthode suivante vérifie si 'validateTime" est entre "startTime" & "endTime" ou pas, tout en considérant la possibilité que la "fin des temps" peut être un jour prochain. Pour l'utiliser correctement analyser vos dates de "HH:mm" formants.
Après avoir lu quelques réponses, je sens que l'écriture est trop compliqué. Essayez mon code
Qu'avec l'aide de @kocko, l'intégralité du code du travail est comme ci-dessous:
Le travail Effectif de la fonction sera comme suit
Dans votre cas, l'heure de départ (20:11:13) est plus grande que la fin de la période (14:49:00). Il est raisonnable de supposer que vous pourriez résoudre le problème par l'ajout d'un jour sur l'heure de fin ou de la soustraction d'un jour à l'heure de départ. si vous le faites, vous serez pris au piège parce que vous ne savez pas quel jour de la semaine, la durée du test est.
Vous pouvez éviter ce piège en vérifiant si votre temps d'essai est entre la fin de l'heure et de l'heure de départ. Si la valeur est true, alors le résultat est pas "entre"; d'autre résultat est "bien entre".
Voici la fonction en JAVA, j'ai été à l'aide. Cela fonctionne tellement bien pour moi. Bonne chance.
Pour créer un Calendrier de l'instance, vous pouvez utiliser:
Java 8 - LocalDateTime
Quoi à ce sujet?
Dans le code snipet ci-dessous, il est vérifié que si l'heure actuelle (peut-être) existe entre le début et la fin des temps ou pas:
J'ai fait de cette façon:
Edit:
LocalTime
?LocalTime
, mais ne semble pas vraiment répondre à la question posée. Évitez également précédé de zéros: Ils travaillent pour00
,02
et04
, mais pas pour08
et09
.LocalTime.of
02
représente un octal (base 8) nombre. Voir section 3.10.1 de la Java Language Specification.Ici est une solution qui utilise le nouveau Java 8 classes, est compact, ne nécessite pas d'expressions régulières ou manuel des opérations arithmétiques. Ma solution est codé pour l'inclusion startTime et exclusive de la fin des temps, mais peut facilement être modifié pour répondre à vos besoins.
bande de colons de l' $heure, $et $de chaînes, de les convertir en int et ensuite utiliser la condition suivante pour vérifier si le temps est entre de et de. Exemple est en php, mais ne compte pas.
désolé pour le sudo code..je suis sur un téléphone. 😉
si elles sont des horodateurs ou des chaînes les travaux de cette. il suffit de changer les noms des variables pour correspondre à
Logiquement, si vous effectuez les opérations suivantes, vous devez toujours être ok accordée, nous utilisons l'heure militaire...
si l'heure de début est plus que temps de la fin, ajouter les 24 à la fin des temps
d'autre fois comme le
comparer les temps pour être dans l'intervalle de début et de fin des temps.
Que de nombreuses personnes ont remarqué, ce n'est pas une date, c'est un problème de logique.
Imaginons qu'un jour est divisé en deux périodes: l'une se situe entre 20:11:13 et 14:49:00, tandis que l'autre se situe entre 14:49:00 et 20:11:13 (quel intervalle les extrêmes appartiennent, c'est à vous de voir).
Si vous voulez vérifier si un certain temps est inclus dans le 20:11:13 et 14:49:00 une, celle qui vous intéresse de la, il suffit de vérifier s'il est inclus dans l'autre, 14:49:00/20:11:13, ce qui est beaucoup plus facile parce que l'ordre naturel des nombres, puis annuler le résultat.
Sur la base des idées et des solutions de la plupart des auteurs ici, je voudrais partager ma raffiné solution sans doute plus propre code:
Par souci d'exhaustivité, j'ai ajouté les conditions de A. 3 et A. 4, mais dans la production de code, vous pouvez les laisser.
Maintenant, vous pouvez tout simplement créer votre début et date de fin, ainsi que le temps que vous voulez vérifier et d'appeler cette méthode statique. Le code devrait aller, puis comme suit:
Pour le TDD aspect, j'ai ajouté des tests unitaires pour les scénarios A et B ci-dessus. N'hésitez pas à les tester et de les rapporter si vous trouvez des erreurs ou des spots pour l'optimisation.
Cheers!
Cela fonctionne, mais a besoin de quelques améliorations.
Modifier votre code comme celui-
but those improvements must be made by the who asked the question
Je suis en désaccord. Lors de la location d'expliquer, ce que le code fait réellement et pourquoi vous avez besoin de temps comme une chaîne de caractères. Ne pas le fairePlease don't down vote this
. Qui demande un downvotewhat is the capital of india
, j'ai simplement avoir à direnew delhi
. je n'ai pas besoin de répondre comme -the capital of india is new delhi
. parce que répéter la question n'est pas la bonne façon de répondre. j'ai simplement répondu à ce que le demandeur a demandé. aucun doute peut être désactivée dans les commentaires. pour l'avenir importance sujet, je veux juste dire que dans l'avenir , si quelqu'un face au même problème, il faudrait d'abord lire la question ci-dessus, puis lire la réponse. les utilisateurs qui downvoted moi ici sont soit desdidn't read the question
ou tout simplementwant to discourage me
. et je me marre.