Umgang mit Datums- und Zeitstempeln über MitternachtHallo zusammen,
Ich arbeite mit Daten aus einem Experiment, bei dem Licht und Tag in einer kontrollierten Umgebung vertauscht wurden.
In diesem Fall wird das Licht über einen bestimmten Zeitraum täglich um 22 Uhr eingeschaltet und täglich um 10 Uhr ausgeschaltet. Für jeden DateTime-Wert (alle 5 Minuten) in diesem Experiment habe ich eine Spalte erstellt, in der ich charakterisieren muss, ob es hell oder dunkel ist.
Ich habe ein Skript erstellt:
If( :LightsOnDate < :DateTime <= :LightsOffDate,
"Light phase",
"Dark phase"
)
Wenn Daten in DateTime nach 22 Uhr verschoben werden, wird der Wert "Hellphase" korrekt eingegeben. Wenn sie jedoch nach Mitternacht verschoben werden, wechselt sie wieder in "Dunkelphase".
Warum macht es das und wie kann ich es reparieren?
Br Julie
DatentabelleSkriptingBetreff: Umgang mit Datums- und Zeitstempeln über MitternachtIhre Formel scheint richtig zu funktionieren. LightOnDate in den letzten drei Zeilen ist höchstwahrscheinlich falsch, da das Licht am Vortag eingeschaltet wurde?
Betreff: Umgang mit Datums- und Zeitstempeln über MitternachtAngesichts der Tatsache, dass Ihre Ein- und Ausschaltzeiten statisch sind, sollte die Formel meiner Meinung nach lauten
If( Hour( :DateTime - In Hours( 10 ) ) < 12,
"Dark phase",
"Light phase"
)
Man muss sich mit der Stunde des Tages befassen, und das Abziehen der 10 Stunden zwingt die Tage zur Allokation
Betreff: Umgang mit Datums- und Zeitstempeln über MitternachtHallo @ JulieSAppel ,
Wie @ txnelson Erwähnungen, müssen Sie sich mit der Tageszeitfrage befassen. Ich habe es mit der folgenden Änderung an Ihrer Spaltenformel zum Laufen gebracht. Ich habe die 22 gewählt, weil die Lichter immer um 22:00 Uhr angehen. Es gibt aber auch andere Möglichkeiten, dies zu tun.
If(
:LightOnDate < :DateTime <= :LightOffDate |
Date Difference( :DateTime, :LightOnDate, "Hour" ) == 22,
"Light Pahse",
"Dark Phase"
)
Betreff: Umgang mit Datums- und Zeitstempeln über MitternachtIch denke, dass Sie nur den Wert: DateTime benötigen, da das Ein- und Ausschalten immer gleich ist. Ähnlich zu @ txnelson . Wenn ja, ist dieser Ausdruck einfacher.
t1 = Modulo( :DateTime, In Days( 1 ) );
If( In Hours( 10 ) < t1 <= In Hours( 22 ),
"Dark",
"Light"
);
Betreff: Umgang mit Datums- und Zeitstempeln über MitternachtIm Folgenden wird erklärt, was falsch ist. Jede Zeile in Ihrer Datentabelle fällt in eine der beiden Situationen.
1) DateTime befindet sich auf der linken Seite des durch OnDate und OffDate definierten Intervalls
2) DateTime liegt zwischen OnDate und OffDate.
Die zweite Situation gibt immer die erwartete Antwort. Die erste Situation wird fast die Hälfte der Zeit scheitern.

Betreff: Umgang mit Datums- und Zeitstempeln über MitternachtVielen Dank für alle Ihre Antworten. Ich sehe das Problem mit Mitternacht, aber ich dachte nur, dass DateTime im Grunde genommen nur ein numerischer Wert ist, der ausgewertet werden muss, ob er in einem Bereich liegt oder nicht. Es wäre kein Problem, aber ich glaube, ich habe mich geirrt.
Ich sehe die verschiedenen Lösungen, die für diese spezifischen Daten funktionieren, aber ich suche nach einer generischen Lösung (das hätte ich wahrscheinlich erwähnen sollen), die zu verschiedenen Datensätzen passt, bei denen LightsOn und LigthsOff anders sind als hier.
Für andere Datensätze kann LightsOn um 7 Uhr und LightsOff um 21 Uhr sein, was bedeutet, dass die verschiedenen Zeiträume auch unterschiedlich lang sein können.
Gibt es überhaupt etwas zu umgehen?
Br Julie
Betreff: Umgang mit Datums- und Zeitstempeln über Mitternacht@ JulieSAppel Ich denke, Sie haben insofern Recht, als Sie den Vergleich der Datumswerte durchführen können. Ich bin einverstanden mit @jthi Die Antwort lautet, dass die Formel, die Sie haben, korrekt ist, der Wert für LightOnDate jedoch möglicherweise nicht.