Conversioni di fuso orario su back-end o front-end

2

Ho un'app Web con un back-end API ASP.NET e il front-end React. Ha anche un'app mobile costruita in React Native.

La domanda riguarda i valori di data / ora. Ho due opzioni per gestire le conversioni del fuso orario e desidero ottenere alcune opinioni su quale sia l'approccio migliore.

  1. È possibile memorizzare il fuso orario dell'utente nel database e inviare tutti i valori di data / ora già convertiti nel fuso orario dell'utente, in base ai dati del fuso orario salvati. Il vantaggio di questo approccio è che il front-end non deve fare alcun lavoro. Questo è un vantaggio soprattutto per gli smartphone più vecchi con risorse di sistema limitate.
  2. La seconda opzione è quella di inviare i valori UTC al front-end React e alle app mobili e lasciare che JavaScript gestisca il lavoro di visualizzazione dei valori data / ora in base al fuso orario dell'utente che acquisisce in runtime. Il vantaggio di questo approccio è che JavaScript acquisisce il fuso orario dell'utente in tempo reale e può essere più preciso. Ad esempio, l'utente potrebbe dirmi che si trova nel fuso orario degli Stati Uniti orientali, ma in seguito si recherà in California, ad esempio nel fuso orario del Pacifico USA. Immagino che consentire a JavaScript di gestire i dati del fuso orario possa eliminare la preoccupazione creata dall'esplorazione dell'utente verso un altro fuso orario.
posta Sam 24.07.2017 - 03:19
fonte

3 risposte

3

Le regole generali sono "Invia sempre gli orari della data come UTC" e converti solo sul livello di presentazione.

Tuttavia, javascript è spazzatura con datetimes. Quindi vorrei fare il lato server di conversione richiesto e inviare ENTRAMBI.

Hai bisogno dell'UTC nel caso in cui desideri ordinare gli articoli in base al tempo o fai qualsiasi manipolazione dei dati come 'aggiungi un'ora' senza preoccuparti dell'ora legale e simili.

In effetti, probabilmente vorrai inviare UTC, ora locale, ora locale e versioni stringa localizzate di quelle. Tratta qualsiasi elemento del lato client come livello di presentazione

    
risposta data 24.07.2017 - 13:48
fonte
2

Con l'ora e il fuso orario l'esperienza mi ha detto che desideri ridurre al minimo il numero di luoghi diversi in cui viene eseguita la stessa operazione.

  • Sorgente unica di "now". Se hai bisogno dell'ora corrente sul client, chiedi al server. Questo elimina un'intera classe di errori "in pochi minuti".

  • Unica fonte di regole del fuso orario. Preferisco fare le conversioni del fuso orario nel server, coerentemente dallo stesso database TZ, in modo che non ci possano essere differenze dispari perché una parte del sistema ha avuto un aggiornamento del database TZ e l'altra no.

  • Un modo unico per rappresentare il tempo. Preferisco i timestamp ISO, perché includono sia l'offset che la data e l'ora in modo leggibile.

Una cosa fondamentale da tenere in considerazione è data + ora + offset non indica quale fuso orario è coinvolto. Un fuso orario è una regola di calcolo che quando viene applicata all'ora UTC fornisce l'ora locale, ma non può essere utilizzata nell'altra direzione (poiché alcune volte locali si verificano due volte o non lo sono affatto, grazie a DST e altre stranezze). Pertanto, per eseguire la conversione del fuso orario è necessario (A) la data e l'ora UTC (o qualcosa di simile a UTC come datetime + offset) e (B) un identificatore del fuso orario. Puoi spedire entrambi quelli al cliente, ma tende a rendere le API brutte.

    
risposta data 24.07.2017 - 13:41
fonte
1

Penso che questo possa essere inquadrato non solo come un problema ASP / React, ma come un problema generale riguardante l'interazione server / client.

Dovresti provare a rispondere alle seguenti domande:

  • Quanto conta realmente il fuso orario per i tuoi clienti? È un servizio di consegna in cui il tempo è cruciale o è un sito di fotoritocco in cui il tempo è più disponibile?

  • Come corollario a quanto sopra, è abbastanza sicuro rilevare automaticamente il fuso orario del client, oppure il fuso orario è così cruciale che dovrebbe sempre essere resa un'opzione esplicita impostata dall'utente?

  • Il fuso orario è così importante che i tuoi clienti potrebbero aver bisogno di visualizzare l'ora in più zone? per esempio. fare in modo che il server memorizzi il fuso orario predefinito del client; e se il client segnala di aver rilevato uno spostamento nel fuso orario, offri all'utente che l'ora sia visualizzata in entrambe le zone locali e predefinite.

  • Con quale frequenza il cliente si aspetta di muoversi? Il client è su un carrello di trasporto o è un server in qualche data warehouse?

Penso che le risposte a queste domande dovrebbero aiutare a valutare il costo (tempo di sviluppo, manutenibilità, complessità) rispetto al vantaggio.

    
risposta data 24.07.2017 - 05:51
fonte

Leggi altre domande sui tag