Gestion des horodatages à minuitSalut à tous,
Je travaille avec les données d'une expérience où la lumière et le jour ont été inversés dans un environnement contrôlé.
Dans ce cas, sur une certaine période de temps, la lumière est allumée à 22 heures et s'éteint à 10 heures tous les jours. Pour chaque valeur DateTime (toutes les 5 min) dans cette expérience, j'ai créé une colonne où je dois caractériser si c'est clair ou sombre.
J'ai créé un script:
If( :LightsOnDate < :DateTime <= :LightsOffDate,
"Light phase",
"Dark phase"
)
Lorsque les données dans DateTime passent au-delà de 10 PM, elles mettent correctement la valeur "phase claire", mais quand elles passent au-delà de minuit, elles repassent en "phase sombre".
Pourquoi fait-il cela et comment puis-je y remédier?
Frère Julie
Tableau de donnéesScriptingRe: Gestion des horodatages à minuitVotre formule semble fonctionner correctement. LightOnDate sur les trois dernières lignes est probablement incorrect car la lumière a été allumée la veille?
Re: Gestion des horodatages à minuitÉtant donné que vos heures de marche et d'arrêt sont statiques, je pense que la formule devrait être
If( Hour( :DateTime - In Hours( 10 ) ) < 12,
"Dark phase",
"Light phase"
)
Il faut s'occuper de l'heure de la journée, et la soustraction des 10 heures oblige les jours à s'aligner
Re: Gestion des horodatages à minuitsalut @JulieSAppel ,
Comme @txnelson mentions, vous devez faire face à la question de l'heure. Je l'ai fait fonctionner avec la modification suivante de votre formule de colonne. J'ai choisi le 22 car les lumières s'allument toujours à 22h00. Mais, il y a d'autres façons d'y parvenir.
If(
:LightOnDate < :DateTime <= :LightOffDate |
Date Difference( :DateTime, :LightOnDate, "Hour" ) == 22,
"Light Pahse",
"Dark Phase"
)
Re: Gestion des horodatages à minuitJe pense que vous n'avez besoin que de la valeur: DateTime puisque la lumière allumée et la lumière éteinte sont toujours les mêmes. Semblable à @txnelson . Si tel est le cas, cette expression est plus simple.
t1 = Modulo( :DateTime, In Days( 1 ) );
If( In Hours( 10 ) < t1 <= In Hours( 22 ),
"Dark",
"Light"
);
Re: Gestion des horodatages à minuitCe qui suit explique ce qui ne va pas. Chaque ligne de votre tableau de données se situe dans l'une des deux situations.
1) DateTime est sur le côté gauche de l'intervalle défini par OnDate et OffDate
2) DateTime est entre OnDate et OffDate.
La deuxième situation donne toujours la réponse attendue. La première situation échouera presque la moitié du temps.

Re: Gestion des horodatages à minuitMerci pour toutes vos réponses. Je vois le problème avec minuit, mais je pensais juste que comme DateTime est essentiellement une valeur numérique qui doit être évaluée si elle est dans une plage ou non, ce ne serait pas un problème, mais je suppose que je me suis trompé.
Je vois les différentes solutions fonctionner pour ces données spécifiques, mais je recherche une solution générique (j'aurais probablement dû le mentionner) qui s'adaptera à différents ensembles de données où LightsOn et LigthsOff sont différents de ce qu'ils sont ici.
Donc, pour les autres ensembles de données, LightsOn pourrait être à 7 heures du matin et LightsOff à 21 heures, ce qui signifie que les différentes périodes peuvent également varier en longueur.
Est-il possible de contourner cela?
Frère Julie