Compte tenu de n'importe quel horodatage UNIX (c'est-à-dire 1306396801) qui se traduit par 26.05.2011 08:00:01, comment puis-je déterminer si cela se trouve dans un délai donné (c'est-à-dire 08:00:00 et 16:00:00)? p>
Cela doit fonctionner pendant n'importe quel jour. Je veux juste savoir si cet horodatage est dans l'intervalle de temps donné, sur toute journée future (ou passée), la date est sans importance. Je m'en fiche si c'est le 25 ou le 26, tant qu'il est compris entre 08h00 et 16h00. P>
Je suis à la recherche d'une solution Java, mais tout pseudo code qui fonctionne sera correct, je vais simplement le convertir. P>
Mes tentatives jusqu'à présent converties en un calendrier Java et lisent les valeurs hour / min / s et les comparant, mais cela vient d'ouvrir une grande boîte de vers. Si l'intervalle de temps, je le veux entre 16,30, je ne peux pas simplement vérifier pour Tshour> Framestarthour && Tsmin> Framestartmin que cela jettera tous les horodatages qui ont une pièce minute> 30. P>
Merci d'avoir regardé ceci :) p>
clarifier. Je n'utilise que et faisant référence à l'UTC Time, mon horodatage est en UTC et la plage que je souhaite dans l'intérieur est dans UTC. P>
5 Réponses :
Votre horodatage Unix est un moment absolu. Votre trame de temps est relative. Vous avez besoin d'une sorte d'informations sur le fuseau horaire afin de résoudre ce problème. Je viens de répondit à une partie de cela pour PostgreSQL une> il y a quelques minutes. Espérons que cet article est utile. P>
Ok, je pense que je reçois la partie sur l'heure relative, mais mon horodatage et la plage de l'heure / min / sec, je le souhaite dans l'UTC.
Convertissez le début de votre plage en horodatage UNIX et la fin de votre plage à un TMESTAMP UNIX, alors c'est un simple contrôle entier. p>
Oui et non. Si je veux faire cela seulement pendant 1 jour, c'est un morceau de gâteau. Mais ce n'est pas ce que je veux, je veux obtenir "vrai" si cet horodatage a eu une heure et une pièce minute entre un intervalle défini.
Compte tenu de votre horodatage (en secondes) et de la fuseau horaire souhaité, Jodatime vous donne l'heure qui vous conduit à une simple vérification de la gamme entier. avec Java.util. * C'est plus difficile. P> P>
Est-ce que cette boîte de vers (si / elsesif jusqu'à ce que mes yeux saignent) la seule / meilleure solution?
Eh bien, c'est juste (heure> = 8) && (heure <16). Mais si vous souhaitez considérer les minutes aussi que vous souhaitez convertir la dateTime en une heure locale et utiliser les méthodes israter () et Isbefore (). Sentez-vous de la chance que votre heure ne soit pas de plus de minuit. J'ai eu cette tâche une fois et cela m'a donné mal à la tête! ;-)
Eh bien, j'ai fini par le faire comme ça, malheureusement. Peut-être que Jodatime a obtenu un calendrier plus cohérent.Après () lors de la fixation de certains champs à zéro, mais je n'ai pas essayé cela. Force brute tout le chemin ...: p
Et après 2 heures de faire de cette façon, je suis revenu et j'ai trouvé la solution mod!
Cela semble guère comme le type de tâche qui exige une bibliothèque tierce.
Si je vous ai bien compris, il vous suffit de normaliser vos dates à une valeur commune. Créez trois instances de calendrier - une avec votre temps, mais une journée, un mois et une année réglées à zéro, et deux avec le début et la fin de votre période, d'autres champs sont également mis à zéro. Ensuite, vous pouvez utiliser calendrier.Après () et calendrier.before () pour voir si la date est comprise entre la plage. P>
J'ai fait des tests à ce sujet et avec le calendrier, j'ai eu des résultats incohérents. Même si je suis assis tout à 0, cela ne m'a donné rien je pourrais utiliser. J'ai fini par vérifier chaque valeur.
Je pense que je comprends ce que vous voulez. Vous souhaitez tester n'importe quel jour, s'il est entre 8h et 16 heures UTC. Prenez l'horodatage mod 24 * 3600. Cela vous donnera le nombre de secondes écoulées dans la journée. Ensuite, vous comparez simplement que c'est entre 8 * 3600 et 16 * 3600. Si vous avez besoin de traiter des fuseaux horaires, les choses deviennent plus compliquées. p>
Merci, une solution vraiment soignée à mon problème!
Dans quel fuseau horaire? Le fuseau horaire local du client? Utilisez-vous l'heure d'été de la journée?
J'utilise UTC (AKA GMT)
Merci pour toutes les suggestions, je vais faire des tests et voir comment ça va :)