Memorizzazione di un evento per tutto il giorno nel database

3

Ho una tabella degli eventi che dovrebbe memorizzare eventi (dt_start, dt_end, all_day, ecc.).

Ho visto che i file .ical memorizzano dt_start e dt_end come lo stesso giorno (senza orario) per un evento "all_day".

Domanda: se ho un evento per tutto il giorno 2015.09.08, come dovrebbe apparire per un utente che ha un fuso orario diverso? Lungo due giorni? o un solo giorno?

    
posta user237329 08.09.2015 - 11:17
fonte

1 risposta

2

Se qualcuno mi ha dato questo problema, probabilmente farei quanto segue:

Tutti i dati nel sistema devono essere memorizzati in un fuso orario (normalmente UTC), quindi solo quando il valore deve essere stampato sull'output in caso di offset del fuso orario.

L'utente imposta un evento per tutto il giorno, che apparirebbe all'utente come 00: 00: 00.000 - 23: 59: 59.999 nel locale dell'utente tempo . Ciò significa che trovare conflitti di pianificazione è banale, anziché dover controllare in qualche modo se un evento è contrassegnato come tutto il giorno.

Ora, per quanto riguarda la memorizzazione, se si hanno utenti in fusi orari diversi, la cosa migliore da fare è convertire tutto in UTC prima di memorizzarlo nel database. Quindi, quando si esegue il rendering di un calendario di un particolare utente, convertirlo all'ora locale solo a scopo di visualizzazione.

Quando l'utente fa riferimento a qualsiasi cosa , il backend dovrebbe sempre funzionare su UTC, prendendo sempre in considerazione l'offset quando è il momento di stampare qualcosa all'utente.

Operando in questo modo, molto raramente dovrai preoccuparti dei fusi orari e controllare i conflitti è veramente semplice . Se un utente in +6 ore guarda il programma di un utente in -5 ore, l'interfaccia dovrebbe idealmente mostrare l'evento nel tempo regolato in base al tempo di visualizzazione dell'utente. Ciò significa che un evento per tutto il giorno a Londra verrà eseguito dalle 5:00 alle 4:59: 59.999pm se visualizzato in un fuso orario +5. Non va bene alla persona in un fuso orario diverso se il suo calendario mostra l'evento per due giorni interi o per un giorno (errato) come se avesse bisogno di chiamare o essere coinvolto in qualche modo, potrebbe facilmente perderlo.

Modifica

Grazie a @Blrfl per il collegamento ad esso, ma molti DBMS hanno un eccellente supporto per le operazioni di fuso orario integrate, quindi potresti non voler fare ciò che ho suggerito. Per quanto riguarda la visualizzazione, ti consiglio comunque di visualizzarlo come giorni sovrapposti, soprattutto se gli eventi di altri utenti di vari fusi orari verranno visualizzati sullo stesso calendario.

    
risposta data 08.09.2015 - 17:54
fonte

Leggi altre domande sui tag