În acest tutorial, veți învăța să lucrați cu date și ore în Java și în aplicații Android. Datele și datele de timp pot fi determinate, modificate și stocate într-o varietate de moduri.
Aplicațiile Android sunt scrise în Java, un limbaj de programare. Java are un număr de tipuri de date primitive pentru diferite tipuri de numere (numere întregi, flotoare etc.), valori booleene și caractere unice. Java include, de asemenea, numeroase clase pentru stocarea, formatarea și modificarea datelor de dată și oră pentru a fi utilizate în aplicațiile Android. În acest tutorial, veți afla cum să determinați data și ora curente, să stocați datele de dată și de timp și să le afișați în mai multe moduri.
Din punct de vedere tehnic, nu aveți nevoie de niciun fel de instrumente pentru a finaliza acest tutorial, dar cu siguranță veți avea nevoie de ele pentru a dezvolta aplicații Android.
Pentru a dezvolta aplicații Android (sau orice aplicații Java, de pildă), aveți nevoie de un mediu de dezvoltare pentru a scrie și a construi aplicații. Eclipse este un mediu de dezvoltare foarte popular (IDE) pentru Java și IDE preferat pentru dezvoltarea Android. Este disponibil gratuit pentru sistemele de operare Windows, Mac și Linux.
Pentru instrucțiuni complete despre cum să instalați Eclipse (inclusiv versiunile acceptate) și SDK-ul Android, consultați site-ul Web pentru dezvoltatorii Android.
Primele lucruri: data și ora sunt în principiu două părți ale aceleiași date (un punct în timp). Când vine vorba de stocarea datelor și a timpului într-un computer, poate fi util să vă gândiți la prima clasă de calculatoare și să rețineți că toate datele de pe un computer sunt alcătuite din "cele și zerouri". Computerele (și dispozitivele Android nu fac excepție) nu au într-adevăr un sentiment de timp ca oamenii, ci păstrează o reprezentare numerică a datei sau timpului curent (întotdeauna bifând înainte, câte o milisecundă) și apoi formatați aceste informații în moduri diferite de a se potrivi scopurilor specifice. La urma urmei, o singură clipă în timp este interpretată diferit, în funcție de fusul orar sau de locația dvs., indiferent dacă dvs. (sau zona dvs.) recunoașteți economiile de vară și diferiți alți factori.
Adăugați la acest fapt că datele și orele sunt afișate diferit în diferite culturi și locații. De exemplu, în Statele Unite, formatele noastre adesea sunt formate astfel: 6 aprilie 1981 sau 04/06/1981, în timp ce în Europa, ziua precedă în mod normal luna, după cum urmează: 6 aprilie 1981 sau 06/04 / 1981. În mod similar, unele țări au conceptul de AM și PM cu o durată de 12 ore, în timp ce altele utilizează pur și simplu un ceas de 24 de ore.
Computerele, inclusiv dispozitivele Android, calculează orele și datele ca număr unic (lung) - care crește odată cu trecerea timpului. Numărul în sine este egal cu numărul de milisecunde scurs de la o anumită dată în trecut. În acest caz, momentul în care începe să "bată" este: miezul nopții, 1 ianuarie 1970. Acest mecanism este denumit timp Unix sau POSIX.
Test rapid! Care dintre următoarele șiruri reprezintă corect a patra lună a anului calendaristic (gregorian): A, aprilie, aprilie, aprilie, 4 sau 04? Răspunsul? Toti. Deja, lucrul cu datele și orele pare un pic cam complicat, nu-i așa? De fapt, am făcut o examinare rapidă a tuturor cărților de referință Java din biroul nostru (nu insuficiente) și foarte puține date și ore de acoperire în orice mod substanțial. Dar nu intră în panică. Doar acceptați faptul că, în calitate de dezvoltator, va trebui să exersați un pic de efort pentru a satisface două obiective:
1. Obiectivul dvs. extern: Să permiteți utilizatorului să lucreze cu formatele de dată și oră cu care se simt cel mai bine sau cel puțin familiarizat.
2. Obiectivul dvs. intern: pentru a menține codul dvs. de aplicație independent de format, deci funcționează peste tot cu putință.
Acum, să vorbim puțin despre fiecare dintre aceste obiective.
Ați observat vreodată că puține site-uri de călătorie permit utilizatorului să introducă manual informații despre dată sau timp? În schimb, se bazează pe agenții de selecție a calendarului și pe meniurile fixe de zi, lună și an sau, cel puțin, aplică un anumit format de dată (de obicei legat de limba / țara dvs., pe care le solicită în prealabil). Din perspectiva interfeței cu utilizatorul, aplicațiile trebuie să respecte nuanțele datei și timpului, cel puțin într-o oarecare măsură. Cu toate acestea, ar trebui să analizați cu atenție și metodele în care utilizatorul poate introduce informații despre dată și oră. Prin utilizarea selectorilor standard de dată și oră în aplicațiile Android, cum ar fi DatePicker și TimePicker, limitați efectiv datele pe care utilizatorii le pot introduce la cele care pot fi ușor convertite în structuri de dată și oră corespunzătoare, fără a fi nevoie să analizați fiecare format cunoscut menționați greșelile sale).
Din perspectiva codului intern, aplicațiile dvs. ar trebui să utilizeze o reprezentare generică a datei / orei care să nu se bazeze pe aceste nuanțe.
În Java, datele și orele sunt stocate în mai multe moduri, în funcție de cerințele dvs..
Există mai multe moduri de a determina ora curentă pe un dispozitiv Android.
Puteți determina datele brute de dată și de timp utilizând metoda statică furnizată în clasa System (java.lang.System):
lung msTime = System.currentTimeMillis (); Data curDateTime = data nouă (msTime);
Această metodă se bazează pe timpul pe care îl are dispozitivul crede este, care poate sau nu poate fi de încredere. O altă modalitate de a determina data și ora curentă utilizează constructorul implicit pentru clasa Date, care creează un obiect Date cu data și ora curente:
Data anotherCurDate = data nouă ();
Există încă alte moduri de a determina adevăratul moment exact calculatoarele verifică frecvent serverele de menținere a timpului pentru a vă asigura că toată lumea este "în sincronizare". Acest proces depășește cu puțin scopul acestui tutorial, dar este suficient să spunem că doar solicitarea și primirea timpului corect necesită ceva timp, care trebuie apoi să fie luat în considerare înainte ca sincronizarea să poată fi realizată cu adevărat.
(Notă: dispozitivele Android care se conectează la serviciile celulare au tendința de a avea date locale și date precise despre locație, deoarece acestea pot fi utilizate în comunicațiile cu turnurile radio.)
Ce se întâmplă dacă doriți să creați o variabilă de dată sau de timp dintr-o anumită dată, ca de exemplu o zi de naștere. Poate că știți, chiar în partea de sus a capului dvs., numărul de milisecunde de la 1/1/1970 miezul nopții care reprezintă ziua ta de naștere. În cazul meu, ar fi ceva de genul 229703700 milisecunde, sau în dimineața zilei de 12 aprilie 1977 (ajustată pentru California). Cu toate acestea, după cum puteți vedea, este foarte greoaie. Într-adevăr, ceea ce vrei să faci este să spui: computer, crează-mi o variabilă dată / oră reprezentând 12 aprilie 1977. Aici intră clasa Calendar:
GregorianCalendar bday = noul calendar Gregorian (1977, Calendar.APRIL, 12);
Puteți utiliza obiecte din agendă pentru a manipula date și a extrage informații interesante despre ele. De exemplu, puteți utiliza metoda get () pentru a determina ziua din săptămâna la care m-am născut:
int ziOfWeek = bday.get (Calendar.DAY_OF_WEEK); // Returnează 3, pentru marți!
Rețineți că lunile calendarului sunt bazate pe 0, deci luna ianuarie este luna 0, nu luna 1 și, prin urmare, luna aprilie este luna 3, nu 4. În sfârșit, puteți extrage un obiect Date dintr-o configurație de dată calendaristică folosind metoda getTime () metodă.
Puteți utiliza clasa helper numită DateFormat (java.text.DateFormat) pentru a converti informațiile brute de dată și oră în diferite formate de șir (pentru localizări diferite, etc.) sau pentru a analiza informațiile String în biții de dată și de timp corespunzători pentru a fi utilizați în cod.
De exemplu, puteți utiliza clasa SimpleDateFormat (o subclasă a clasei DateFormat) pentru a crea un șir personalizat care conține informații despre dată și oră. Mai întâi, trebuie să specificați șirul de formate folosind codurile corespunzătoare pentru diferiții biți de informații (consultați documentația SimpleDateFormat pentru detalii privind codurile individuale). Apoi, aplicați aceste informații la o anumită dată sau la o anumită dată. De exemplu:
Data anotherCurDate = data nouă (); Formatul SimpleDateFormat = noul SimpleDateFormat ("EEEE, MMMM d 'la' hh: mm a 'în anul' aaaa G '); String formattedDateString = formatter.format (altCurDate);
Dacă ați imprima Stringul numit formattedDateString, s-ar putea să vedeți ceva de genul: "Luni, 6 decembrie la 08:34 în anul 2010 AD".
De asemenea, puteți utiliza clasele DateFormat și SimpleDateFormat pentru a analiza șirurile de date și de timp în clasa de date corespunzătoare. Sperăm că nu veți petrece mult timp în parsarea datelor introduse de utilizator (care, în general, este destul de enervant), dar un mecanism de parsare este util. De exemplu, este posibil să doriți să analizați timestamps-urile dintr-un fișier XML, unde controlați sau cunoașteți în avans formatul marcajului de timp și, prin urmare, puteți genera șirul de format corespunzător pentru a analiza.
Există numeroase moduri de a afișa utilizatorului informații despre dată și oră. Modul pe care îl alegeți depinde de cerințele dvs..
Poate că cea mai simplă modalitate este să afișați pur și simplu o anumită dată sau dată ca un șir corect formatat. Această metodă are cea mai mare semnificație pentru date sau momente fixe, cum ar fi zile de naștere sau evenimente. Pur și simplu utilizați clasa de utilități DateFormat pentru a crea șirul corespunzător și a le afișa pe ecran ca și orice alt text (cum ar fi în cadrul unui control TextView).
Pentru a afișa trecerea timpului "în timp real", puteți utiliza fie controalele AnalogClock (vedeți figura), fie DigitalClock.
Sfat: Căutați un cronometru? Verificați comanda cronometrului.
Datele și orele sunt tipuri importante de date pe care dezvoltatorii Java trebuie să le lucreze în mod inevitabil. Dispozitivele interne stochează numeric datele de timp și de timp, însă utilizatorii interpretează aceste informații în moduri diferite și folosind diferite formate. Mențineți aceste nuanțe sub control prin limitarea modurilor în care utilizatorii pot introduce datele și orele utilizând controalele încorporate și vă asigură că codul dvs. utilizează o reprezentare generică a acestor informații, de exemplu utilizând una dintre cele mai multe clase disponibile pentru stocarea informațiilor de dată și oră.
Dezvoltatorii mobili Lauren Darcey și Shane Conder au coautorizat mai multe cărți despre dezvoltarea Android: o carte de programare în profunzime intitulată Dezvoltarea aplicațiilor fără fir Android și Sams TeachYourself Dezvoltarea de aplicații Android în 24 de ore. Când nu scriu, își petrec timpul dezvoltând software-ul mobil la compania lor și oferind servicii de consultanță. Acestea pot fi obținute prin e-mail la androidwirelessdev@[email protected], prin intermediul blogului lor la androidbook.blogspot.com, și pe Twitter @ androidwireless.