Impara Java per lo sviluppo Android nozioni di base su data e ora

In questo tutorial imparerai a lavorare con date e orari in Java e nelle applicazioni Android. I dati di data e ora possono essere determinati, modificati e archiviati in vari modi.

Le applicazioni Android sono scritte in Java, un linguaggio di programmazione. Java ha un numero di tipi di dati primitivi per diversi tipi di numeri (interi, float, ecc.), Valori booleani e singoli caratteri. Java include anche numerose classi per l'archiviazione, la formattazione e la modifica dei dati di data e ora da utilizzare nelle applicazioni Android. In questo tutorial, imparerai come determinare la data e l'ora correnti, memorizzare i dati di data e ora e visualizzarli in vari modi.

Cosa ti serve

Tecnicamente, non hai bisogno di strumenti per completare questo tutorial, ma sicuramente ti serviranno per sviluppare applicazioni Android.

Per sviluppare applicazioni Android (o qualsiasi altra applicazione Java, per quella materia), è necessario un ambiente di sviluppo per scrivere e creare applicazioni. Eclipse è un ambiente di sviluppo molto popolare (IDE) per Java e l'IDE preferito per lo sviluppo Android. È liberamente disponibile per i sistemi operativi Windows, Mac e Linux.

Per le istruzioni complete su come installare Eclipse (incluse le versioni supportate) e l'SDK Android, consultare il sito Web degli sviluppatori Android.

Che cosa è una data o ora, davvero?

Per prima cosa: la data e l'ora sono fondamentalmente due parti dello stesso pezzo di dati (un punto nel tempo). Quando si tratta di memorizzare date e orari in un computer, può essere utile ripensare alla prima classe del computer e ricordare che tutti i dati su un computer sono costituiti da "uno e zero". I computer (e i dispositivi Android non fanno eccezione) in realtà non hanno il senso del tempo come fanno le persone, ma invece mantengono una rappresentazione numerica della data o dell'ora corrente (sempre spuntando in avanti, un millisecondo alla volta) e poi formatta queste informazioni in modi diversi per soddisfare scopi specifici. Dopo tutto, un singolo istante di tempo viene interpretato in modo diverso a seconda del fuso orario o della località, indipendentemente dal fatto che tu (o la tua zona) riconosca l'ora legale e vari altri fattori.

Aggiungete a questo fatto che date e orari vengono visualizzati in modo diverso in diverse culture e locali. Ad esempio, negli Stati Uniti, spesso formiamo le nostre date in questo modo: 6 aprile 1981 o 04/06/1981 mentre in Europa, il giorno normalmente precede il mese, in questo modo: 6 aprile 1981 o 06/04 / 1981. Allo stesso modo, alcuni paesi hanno il concetto di AM e PM con una 12 ore, mentre altri usano semplicemente un orologio di 24 ore.

I computer, inclusi i dispositivi Android, calcolano le ore e le date come un numero singolo (lungo), che cresce col passare del tempo. Il numero stesso equivale al numero di millisecondi trascorsi da una data specifica nel passato. In questo caso, il momento in cui il "tempo" ha iniziato a ticchettare è: mezzanotte, 1 gennaio 1970. Questo meccanismo è indicato come tempo Unix o tempo POSIX.

Che cosa deve fare uno sviluppatore??

Quiz pop! Quale delle seguenti stringhe rappresenta correttamente il 4 ° mese dell'anno civile (gregoriano): A, aprile, aprile, 4 aprile o 04? La risposta? Tutti loro. Già, lavorare con date e orari sembra un po 'complicato, vero? In effetti, abbiamo fatto una rapida lettura di tutti i libri di riferimento Java nel nostro ufficio (non inconsistenti) e pochissime date e orari di copertura in modo sostanziale. Ma non fatevi prendere dal panico. Accetta solo il fatto che, come sviluppatore, dovrai dedicare un po 'di impegno a soddisfare due obiettivi:

1. Obiettivo esterno: consentire all'utente di lavorare con i formati di data e ora con i quali sono più a proprio agio, o almeno con familiarità.
2. Il tuo obiettivo interno: per mantenere il tuo codice applicativo indipendente dal formato, quindi funziona ovunque con pochi problemi.

Ora parliamo un po 'di ciascuno di questi obiettivi.

L'obiettivo esterno: essere flessibili e utilizzare i controlli standard

Hai mai notato che pochi siti web di viaggi consentono all'utente di immettere manualmente le informazioni sulla data o l'ora? Invece, si basano su raccoglitori di calendari e elenchi a discesa di giorno, mese e anno fissi o, almeno, applicano un formato di data specifico (solitamente legato alla lingua / alla nazione, che chiedono in anticipo). Dal punto di vista dell'interfaccia utente, le tue app devono rispettare le sfumature di data e ora, almeno in una certa misura. Tuttavia, dovresti anche considerare attentamente i metodi con i quali l'utente può inserire le informazioni di data e ora. Utilizzando i selettori di data e ora standard nelle app Android, come DatePicker e TimePicker, limiti effettivamente i dati che gli utenti possono immettere in quello che può essere facilmente convertito in strutture di data e ora appropriate, senza dover analizzare ogni formato noto (non per menziona i suoi refusi).

The Internal Goal: Keep Your Date e Times Generic

Dal punto di vista del codice interno, le tue app dovrebbero utilizzare una rappresentazione generica di data / ora che non si basa su queste sfumature.

In Java, le date e gli orari vengono memorizzati in diversi modi, a seconda delle esigenze.

  • Il tipo lungo è un tipo di dati primitivo in grado di memorizzare il numero di millisecondi trascorsi da un momento specifico nel tempo (tempo Unix).
  • La classe Date (java.util.Date) è una classe di utilità per l'archiviazione di data e ora in un modo che può essere ragionevolmente manipolato senza dover pensare costantemente al tempo in termini di millisecondi.
  • La classe Calendar (java.util.Calendar) è una classe di utilità per lavorare con calendari diversi, oltre che per manipolare informazioni su data e ora in vari modi.
  • La classe GregorianCalendar (una sottoclasse di java.util.Calendar) viene utilizzata principalmente per la manipolazione delle date nell'emisfero occidentale, dove si usa un calendario di 12 mesi, da 7 giorni a settimana, e due ere (BC e AD).

Determinazione della data e ora correnti

Esistono diversi modi per determinare l'ora corrente su un dispositivo Android.

È possibile determinare i dati di data e ora non elaborati utilizzando il metodo statico fornito nella classe System (java.lang.System):

 long msTime = System.currentTimeMillis (); Date curDateTime = new Date (msTime); 

Questo metodo si basa sul tempo che il dispositivo pensa è, che può o non può essere affidabile. Un altro modo per determinare la data e l'ora correnti utilizza il costruttore predefinito per la classe Date, che crea un oggetto Date con la data e l'ora correnti:

 Date anotherCurDate = new Date (); 

Esistono ancora altri modi per determinare l'ora esatta esatta: i computer controllano frequentemente i server di time-keeping noti per assicurarsi che tutti siano "sincronizzati". Questo processo è leggermente oltre lo scopo di questo tutorial, ma basti dire che solo richiedere e ricevere l'ora corretta richiede un po 'di tempo, che deve essere considerato prima che la sincronizzazione possa essere realmente raggiunta.

(Nota: i dispositivi Android che si connettono ai servizi cellulari tendono ad avere informazioni di data e ora precise in quanto potrebbero essere utilizzate nelle comunicazioni con le torri radio).

Creazione di variabili di data e ora da zero

Ora, cosa succede se si desidera creare una variabile di data o ora da una data specifica, come un compleanno. Forse sai, appena in cima alla tua testa, il numero di millisecondi dalla mezzanotte 1/1/1970 che rappresenta il tuo compleanno. Nel mio caso, sarebbe qualcosa come 229703700 millisecondi, o la mattina del 12 aprile 1977 (adattato all'ora della California). Tuttavia, come puoi vedere, questo è molto ingombrante. In realtà, quello che vuoi dire è: computer, creami una variabile data / ora che rappresenta il 12 aprile 1977. Ecco dove entra in gioco la classe Calendar:

 GregorianCalendar bday = new GregorianCalendar (1977, Calendar.APRIL, 12); 

Puoi usare gli oggetti del calendario per manipolare le date ed estrarre informazioni interessanti su di loro. Ad esempio, è possibile utilizzare il metodo get () per determinare il giorno della settimana in cui sono nato:

 int dayOfWeek = bday.get (Calendar.DAY_OF_WEEK); // Restituisce 3, per martedì! 

Tieni presente che i mesi del calendario sono basati su 0, quindi gennaio è il mese 0, non il mese 1 e quindi aprile è il mese 3, non il 4. Infine, puoi estrarre un oggetto Data da una configurazione di data del calendario utilizzando getTime () metodo.

Formattazione di dati di data e ora

È possibile utilizzare la classe helper denominata DateFormat (java.text.DateFormat) per convertire le informazioni crude di data e ora in diversi formati String (per diverse impostazioni locali, ecc.) O per analizzare le informazioni String nei bit di data e ora appropriati da utilizzare nel codice.

Ad esempio, è possibile utilizzare la classe SimpleDateFormat (una sottoclasse della classe DateFormat) per creare una stringa personalizzata contenente informazioni su data e ora. Innanzitutto, è necessario specificare la stringa di formato, utilizzando i codici appropriati per i diversi bit di informazioni (consultare la documentazione di SimpleDateFormat per i dettagli sui singoli codici). Quindi si applicano tali informazioni a una data o un'ora specifica. Per esempio:

 Date anotherCurDate = new Date (); SimpleDateFormat formatter = new SimpleDateFormat ("EEEE, MMMM d 'a' hh: mm a 'nell'anno' aaaa G"); String formattedDateString = formatter.format (anotherCurDate); 

Se dovessi stampare la stringa chiamata formattedDateString, potresti vedere qualcosa come: "Lunedì 6 dicembre alle 08:34 nell'anno 2010 AD".

Per inciso, è anche possibile utilizzare le classi DateFormat e SimpleDateFormat per analizzare stringhe di data e ora nella classe Date appropriata. Si spera che non trascorrerai molto tempo ad analizzare le date immesse dall'utente (che, in genere, è piuttosto fastidioso), ma è utile disporre di un meccanismo di analisi. Ad esempio, potresti voler analizzare i timestamp da un file XML, in cui controlli o conosci il formato del timestamp in anticipo, e quindi puoi generare la stringa di formato appropriata da analizzare.

Visualizzazione delle informazioni di data e ora per l'utente

Esistono numerosi modi per visualizzare le informazioni di data e ora per l'utente. Il modo in cui scegli dipende dalle tue esigenze.

Forse il modo più semplice è semplicemente visualizzare una data o un'ora specifica come una stringa formattata correttamente. Questo metodo ha più senso per date o orari fissi, come compleanni o eventi. Basta usare la classe di utility DateFormat per creare la stringa appropriata e visualizzarla sullo schermo come faresti con qualsiasi altro testo (come all'interno di un controllo TextView).

Per mostrare il tempo che passa "in tempo reale", puoi utilizzare i controlli AnalogClock (vedi figura) o DigitalClock.

Suggerimento: Cerchi un timer? Controlla il controllo del cronometro.

Avvolgendo

Date e orari sono tipi di dati importanti con cui gli sviluppatori Java devono inevitabilmente lavorare. Internamente, i dispositivi memorizzano le informazioni di data e ora numericamente, ma gli utenti interpretano queste informazioni in modi diversi e utilizzando formati diversi. Mantieni sotto controllo queste sfumature limitando il modo in cui gli utenti possono inserire date e orari utilizzando i controlli di selezione incorporati e assicurarsi che il codice utilizzi una rappresentazione generica di queste informazioni, ad esempio utilizzando una delle tante classi disponibili per la memorizzazione di informazioni su data e ora.

Riguardo agli Autori

Gli sviluppatori mobili Lauren Darcey e Shane Conder hanno coautore diversi libri sullo sviluppo di Android: un libro di programmazione approfondito intitolato Sviluppo di applicazioni wireless Android e Sams TeachYourself Sviluppo di applicazioni Android in 24 ore. Quando non scrivono, passano il loro tempo a sviluppare software mobile presso la loro azienda ea fornire servizi di consulenza. Possono essere contattati via email a [email protected], tramite il loro blog su androidbook.blogspot.com e su Twitter @androidwireless.

Hai bisogno di più aiuto nella scrittura di app per Android? Consulta i nostri ultimi libri e risorse!