Gestione dei timbri data e ora fino a mezzanotteCiao a tutti,
Sto lavorando con i dati di un esperimento in cui luce e giorno sono stati scambiati in un ambiente controllato.
In questo caso, per un certo periodo di tempo, la luce si accende alle 22:00 e si spegne alle 10:00 tutti i giorni. Per ogni valore DateTime (ogni 5 min) in questo esperimento ho creato una colonna in cui devo caratterizzare se è chiaro o scuro.
Ho creato uno script:
If( :LightsOnDate < :DateTime <= :LightsOffDate,
"Light phase",
"Dark phase"
)
Quando i dati in DateTime si spostano oltre le 22:00, inseriscono correttamente il valore "fase di luce", tuttavia quando si spostano dopo la mezzanotte cambia di nuovo in "fase oscura".
Perché lo fa e come posso risolverlo?
Fratello Julie
Tabella datiScriptingRi: gestione dei timbri di data e ora fino a mezzanotteLa tua formula sembra funzionare correttamente. LightOnDate nelle ultime tre righe è molto probabilmente errato poiché la luce è stata accesa il giorno precedente?
Ri: gestione dei timbri di data e ora fino a mezzanotteDato che i tuoi tempi di accensione e spegnimento sono statici, credo che la formula dovrebbe essere
If( Hour( :DateTime - In Hours( 10 ) ) < 12,
"Dark phase",
"Light phase"
)
Bisogna fare i conti con l'ora del giorno e la sottrazione delle 10 ore costringe i giorni ad allinearsi
Ri: gestione dei timbri di data e ora fino a mezzanotteCiao @JulieSAppel ,
Come @txnelson menziona, devi affrontare il problema dell'ora del giorno. Ho capito che funziona con la seguente modifica alla formula della colonna. Ho scelto il 22 perché le luci si accendono sempre alle 22:00. Ma ci sono altri modi in cui questo può essere fatto.
If(
:LightOnDate < :DateTime <= :LightOffDate |
Date Difference( :DateTime, :LightOnDate, "Hour" ) == 22,
"Light Pahse",
"Dark Phase"
)
Ri: gestione dei timbri di data e ora fino a mezzanottePenso che tu abbia bisogno solo del valore: DateTime poiché la luce accesa e la luce spenta sono sempre le stesse. Simile a @txnelson . Se è così, questa espressione è più semplice.
t1 = Modulo( :DateTime, In Days( 1 ) );
If( In Hours( 10 ) < t1 <= In Hours( 22 ),
"Dark",
"Light"
);
Ri: gestione dei timbri di data e ora fino a mezzanotteQuanto segue spiega cosa c'è che non va. Ogni riga nella tabella dei dati rientra in una delle due situazioni.
1) DateTime si trova a sinistra dell'intervallo definito da OnDate e OffDate
2) DateTime è compreso tra OnDate e OffDate.
La seconda situazione dà sempre la risposta attesa. La prima situazione fallirà quasi la metà delle volte.

Ri: gestione dei timbri di data e ora fino a mezzanotteGrazie per tutte le vostre risposte. Vedo il problema con la mezzanotte, ma ho solo pensato che dato che DateTime è fondamentalmente solo un valore numerico che deve essere valutato indipendentemente dal fatto che sia in un intervallo o meno, non sarebbe un problema ma immagino di essermi sbagliato.
Vedo che le diverse soluzioni funzionano per questi dati specifici, ma sto cercando una soluzione generica (probabilmente avrei dovuto menzionarlo) che si adatti a diversi set di dati in cui LightsOn e LigthsOff sono diversi da quello che sono qui.
Quindi, per altri set di dati, LightsOn potrebbe essere alle 7:00 e LightsOff alle 21:00, il che significa che i diversi periodi possono anche variare in lunghezza.
C'è un modo per aggirarlo?
Fratello Julie