Scopri Il Tuo Numero Di Angelo
Lavorare con date e orari nella tua applicazione
Sono uno sviluppatore professionista da circa sei anni. In questi sei anni non ho mai lavorato per un'azienda o su un progetto che non affrontasse problemi di data e ora in qualche forma.
Quasi tutte le applicazioni su cui lavorerai richiedono l'uso del tempo in qualche modo, il che significa che a un certo punto dovrai raccogliere, archiviare, recuperare e visualizzare date o orari. Non esiste un proiettile d'argento per gestire date o orari e non puoi mai sfuggire alla complessità intrinseca che deriva dal nostro concetto di tempo, ma ci sono passaggi che puoi intraprendere per renderlo meno doloroso.
Negli anni in cui ho lavorato con il tempo su diversi linguaggi di programmazione, ho scoperto che le seguenti conoscenze fanno molto.
Scegliere il giusto formato dati
Il primo passo quando si lavora con orari e date è scegliere una rappresentazione per i propri dati. Sebbene formati diversi possano sembrare più o meno uguali, il formato scelto avrà un grande impatto sul modo in cui scrivi ed esegui il debug del codice.
L'utilizzo di un timestamp numerico quando è necessaria una data significherà analizzare il timestamp della data e recuperare la data da quello, che può o non può essere semplice a seconda del fuso orario.
929 numero angelico amore
L'utilizzo di una stringa personalizzata per rappresentare un intervallo di tempo sembra facile da memorizzare e manipolare, ma è difficile eseguire query. Inoltre, l'utilizzo di qualsiasi tipo di rappresentazione non immediatamente riconoscibile dall'occhio umano renderà più difficile il debug del codice.
Quando scelgo un formato per date o orari, mi attengo alle seguenti regole:
- Non utilizzare mai timestamp numerici. Spesso sono i più facili da ottenere dalle librerie standard tra i vari linguaggi di programmazione, ma non sono leggibili dall'uomo e la tentazione di manipolarli è troppo forte.
- Attenersi ISO 8601 , uno standard che definisce un formato per i dati relativi a data e ora. È banale trovare una libreria per qualsiasi lingua in grado di gestire le variazioni di ISO 8601.
- ISO 8601 è uno standard, ma ha molte varianti. Dovresti sempre scegliere la variante di ISO 8601 più leggibile dall'uomo. Ciò non richiede alcuno sforzo aggiuntivo ma semplifica il debug.
- La stringa del timestamp dovrebbe contenere solo i dati di cui hai assolutamente bisogno. Quando si lavora con gli orari, la stringa non deve contenere una data e quando si lavora con una data indipendente dal fuso orario, la stringa non deve contenere un fuso orario. L'aggiunta di informazioni aggiuntive aggiunge ambiguità all'operazione di analisi e all'intento dei dati per gli sviluppatori futuri
- Quando si memorizzano i fusi orari, si normalizza sempre lo stesso fuso orario nei timestamp. Questo non solo rende più facile per un computer ordinare ed elaborare i dati, ma rende anche più facile per uno sviluppatore umano.
Rispettare queste regole non ti costerà molto in anticipo, ma ti semplificheranno la vita quando la tua applicazione sarà stabilita e scoprirai che il tuo utilizzo di orari e date non è quello che ti aspettavi.
Scegliere lo strumento giusto
Come per la maggior parte dei problemi nel nostro settore, la gestione di data e ora si riduce alla scelta dello strumento giusto per il lavoro.
Si è tentati di utilizzare gli strumenti nella libreria standard della tua lingua preferita, ma potrebbe non essere la scelta migliore. Mentre alcune librerie standard hanno fantastiche funzionalità di data e ora (Python), altre sono decisamente pietose (Javascript). L'uso dello strumento sbagliato rende molto più difficile lo sviluppo di funzionalità basate sul tempo e questo rende più facile per i bug entrare nella tua applicazione.
Una buona libreria per la gestione di date e orari ti permetterà di seguire le 5 regole sopra menzionate. Nello specifico, dovrebbe essere in grado di:
- Analizza qualsiasi rappresentazione della data in cui potresti imbatterti (comprese le rappresentazioni esterne).
- Output in qualsiasi rappresentazione della data di cui potresti aver bisogno (incluse le rappresentazioni esterne).
- Manipola date e ore aggiungendo o sottraendo unità di tempo da esse.
- Confronta date e orari.
- Converti correttamente tra fusi orari.
È importante che la tua libreria supporti queste funzionalità, altrimenti la tentazione di provare a implementare la funzionalità da solo sarà troppo alta. E giusto per essere chiari, se provi a implementare una qualsiasi di queste funzionalità da solo, fallirai.
Non analizzare i tuoi timestamp con espressioni regolari, non aggiungere secondi a un timestamp numerico perché sembra un numero normale e non confrontare date e ore utilizzando l'operatore di uguaglianza. Queste librerie esistono perché questi problemi sono difficili da risolvere e reinventare la ruota nella tua applicazione ti lascerà con una ruota rotta.
Di seguito ho alcuni suggerimenti per le biblioteche che soddisfano questi criteri:
linguaggio | Biblioteca |
Pitone | Libreria standard |
Javascript | Momento e Momento fuso orario |
Java 8 e versioni successive | Libreria standard (java.time) |
Java 7 e versioni precedenti | Joda-Time |
Swift | SwiftDate |
Se la tua lingua non è elencata (perché non la conosco abbastanza) cerca semplicemente la libreria di data e ora. È probabile che troverai una buona libreria che farà tutto ciò di cui hai bisogno.
Conoscere il tempo
L'ultimo pezzo di conoscenza che devo condividere non è specifico per lavorare con date e orari, ma è più di una filosofia generale per aiutarci a evitare problemi e si applica alla gestione di data e ora tanto quanto ogni altro problema di programmazione .
Controlla sempre le tue ipotesi.
Affrontiamo ogni problema presentato con un ampio corpo di conoscenze e un corpo ancora più ampio di ipotesi. Quando si gestiscono date e orari è più importante che mai controllare le proprie ipotesi per assicurarsi che siano ancora valide per il proprio scenario.
Questo elenco , intitolato Falsehoods Programmers Believe About Time, fornisce molti esempi eccellenti che illustrano che il tempo probabilmente non è quello che pensavi. Quando stai progettando o sviluppando una funzionalità incentrata sul tempo, ti incoraggio a prendere un partner e passare attraverso questo elenco assicurandoti di aver evitato le insidie elencate.
I bug temporali sono notoriamente difficili da individuare e ancora più difficili da testare. Se sviluppi con questo elenco in mente potresti essere in grado di evitare bug sottili che potrebbero interessare i tuoi clienti ma che potrebbero non essere rilevati (il peggior tipo di bug!)
Fusi orari
Nessuna discussione su orari o date sarebbe completa senza menzionare i fusi orari. Oltre a familiarizzare con le comuni falsità elencate sopra, familiarizza anche con le basi dei fusi orari.
I fusi orari saranno costantemente un punto dolente quando si lavora con il tempo, anche se si pensa di averli 'tutti individuati'. Avere un po 'di conoscenza dei fusi orari ti aiuterà a centrare il tuo pensiero e ti aiuterà a non commettere errori logici durante la manipolazione dei tempi.
Purtroppo non c'è modo di evitare completamente la difficoltà di memorizzare e manipolare orari e date durante la programmazione. Ma se segui questi passaggi e lavori tenendo presente questa conoscenza, puoi semplificare il compito riducendo la quantità di codice da scrivere e costringendoti a paradigmi che hanno meno probabilità di causare problemi.
Condividi Con I Tuoi Amici: