Lær Java for Android Development Grunnleggende om dato og klokkeslett

I denne opplæringen lærer du å jobbe med datoer og tider i Java og i Android-applikasjoner. Dato og klokkeslett data kan bestemmes, endres og lagres på flere måter.

Android-applikasjoner er skrevet i Java, et programmeringsspråk. Java har en rekke primitive datatyper for ulike typer tall (heltall, flyter, etc.), boolske verdier og enkelt tegn. Java inneholder også mange klasser for lagring, formatering og endring av dato- og tidsdata for bruk i Android-applikasjonene dine. I denne opplæringen lærer du hvordan du bestemmer gjeldende dato og klokkeslett, lagringsdato og tidsdata og vise den på flere måter.

Hva du trenger

Teknisk trenger du ikke noe verktøy for å fullføre denne opplæringen, men du vil sikkert trenge dem til å utvikle Android-applikasjoner.

For å utvikle Android-applikasjoner (eller Java-programmer, for øvrig), trenger du et utviklingsmiljø for å skrive og bygge programmer. Eclipse er et svært populært utviklingsmiljø (IDE) for Java og den foretrukne IDE for Android-utvikling. Det er fritt tilgjengelig for Windows, Mac og Linux operativsystemer.

For fullstendige instruksjoner om hvordan du installerer Eclipse (inkludert hvilke versjoner som støttes) og Android SDK, se Android-utviklerens nettsted.

Hva er en dato eller tid, egentlig?

Første ting først: Dato og klokkeslett er i utgangspunktet to deler av det samme datafeltet (et punkt i tid). Når det gjelder lagring av datoer og tider i en datamaskin, kan det være nyttig å tenke tilbake til din første dataklasse og huske at alle dataene på en datamaskin består av "de og nullene". Datamaskiner (og Android-enheter er ikke noe unntak) har egentlig ikke en følelse av tid som folk gjør, men i stedet holder en numerisk representasjon av gjeldende dato eller klokkeslett (alltid tikkende fremover, en millisekund av gangen) og formater deretter denne informasjonen i forskjellige måter å passe til bestemte formål. Tross alt blir et enkelt øyeblikk fortolket annerledes avhengig av tidssone eller plassering, uansett om du (eller ditt område) gjenkjenner sommertid og ulike faktorer.

Legg til dette faktum at datoer og tider vises forskjellig i forskjellige kulturer og lokaler. For eksempel, i USA, formaterer vi ofte datoene våre slik: 6. april 1981 eller 04/06/1981 mens i Europa, går dagen normalt i måneden, slik: 6. april 1981 eller 06/04 / 1981. På samme måte har enkelte land konseptet AM og PM med 12 timer, mens andre bare bruker en 24-timers klokke.

Datamaskiner, inkludert Android-enheter, beregner tider og datoer som et enkelt nummer (en lang) - som vokser når tiden går. Tallet i seg selv er lik antall millisekunder som har gått siden en bestemt dato i fortiden. I dette tilfellet er tidspunktet hvor "tiden" begynte å tikkes: midnatt 1. januar 1970. Denne mekanismen refereres til som Unix-tid eller POSIX-tid.

Hva er en utvikler å gjøre?

Pop Quiz! Hvilken av de følgende strengene representerer riktig 4. måneden i det (Gregorianske) kalenderåret: A, april, april, april, 4 eller 04? Svaret? Alle sammen. Allerede arbeid med datoer og tider virker litt komplisert, ikke sant? Faktisk gjorde vi en rask gjennomgang av alle Java-referansebokene på vårt kontor (ikke ubetydelig) og svært få omslagsdata og -tider på en hvilken som helst betydelig måte. Men ikke panikk. Bare godta det faktum at du som utvikler må utvise litt innsats for å tilfredsstille to mål:

1. Ditt eksterne mål: For å tillate brukeren å jobbe med dato og klokkeslettformatene som de er mest komfortable med, eller i hvert fall kjent med.
2. Ditt interne mål: For å holde programkoden format uavhengig, så fungerer den overalt med lite stress.

La oss nå snakke litt om hvert av disse målene.

Eksternt mål: Vær fleksibel og bruk standardkontroller

Har du noen gang lagt merke til at få reisesider lar brukeren manuelt skrive inn dato eller klokkeslettinformasjon? I stedet stole de på kalenderplukkere og faste rullegardiner for dag, måned og år, eller, i det minste, håndheve et bestemt datoformat (vanligvis knyttet til ditt språk / land, som de ber om på forhånd). Fra et brukergrensesnittperspektiv bør appene dine respektere dato og tidshastigheter, i hvert fall til en viss grad. Du bør imidlertid også nøye vurdere hvilke metoder brukeren kan angi dato og klokkeslettinformasjon. Ved å bruke standard dato og tidplukkere i Android-appene dine, for eksempel DatePicker og TimePicker, begrenser du effektivt dataene brukerne kan legge inn til det som enkelt kan konverteres til passende dato og klokkeslettstrukturer uten å måtte analysere alle kjente format (ikke til nevne dens skrivefeil).

Det interne målet: Oppbevar datoer og tider generisk

Fra et internt kodeneperspektiv skal appene dine bruke en generell dato / tidspresentasjon som ikke stole på disse nyansene.

I Java lagres datoer og klokkeslett på flere måter, avhengig av dine krav.

  • Den lange typen er en primitiv datatype som er i stand til å lagre antall millisekunder som er gått siden et bestemt tidspunkt (Unix-tid).
  • Dato-klassen (java.util.Date) er en verktøysklasse for lagring av dato og klokkeslett på en måte som kan håndteres rimelig uten å måtte konstant tenke på tiden i form av millisekunder.
  • Kalenderklassen (java.util.Calendar) er en verktøysklasse for å jobbe med forskjellige kalendere, samt å manipulere dato og klokkeslettinformasjon på flere måter.
  • Den GregorianCalendar-klassen (en underklasse av java.util.Calendar) brukes primært til dataprofilering på den vestlige halvkule, hvor vi bruker en 12-måneders kalender med 7 dager til en uke og to epoker (BC og AD).

Bestemme gjeldende dato og klokkeslett

Det finnes en rekke måter å bestemme gjeldende tid på en Android-enhet.

Du kan bestemme de røde dato- og tidsdataene ved hjelp av den statiske metoden som er oppgitt i System-klassen (java.lang.System):

 lang msTime = System.currentTimeMillis (); Dato curDateTime = nytt Dato (msTime); 

Denne metoden er avhengig av tiden som enheten mener Det er, som kanskje ikke er pålitelig. En annen måte å bestemme gjeldende dato og klokkeslett på, bruker standardkonstruksjonen for dataklassen, som lager et Date-objekt med gjeldende dato og klokkeslett:

 Dato anotherCurDate = nytt Dato (); 

Det er ennå andre måter å fastslå de sanne, nøyaktige tidsdatamaskinene, ofte sjekke kjente tidsbesparende servere for å sikre at alle er "synkroniseres". Denne prosessen er litt utenfor omfanget av denne opplæringen, men det er nok å si, bare å be om og motta riktig tid tar litt tid, som da må tas hensyn til før synkronisering virkelig kan oppnås.

(Merk: Android-enheter som kobler til mobiltjenester har en tendens til å ha lokal nøyaktig dato og klokkeslettinformasjon, da dette kan brukes i kommunikasjon med radiotårnene.)

Opprette dato og klokkeslett variabler fra grunnen av

Nå, hva om du vil lage en dato eller en tidsvariabel fra en bestemt dato, som en bursdag. Kanskje du vet, like utenfor toppen av hodet ditt, antall millisekunder siden 1/1/1970 midnatt som representerer bursdagen din. I mitt tilfelle ville det være noe som 229703700 millisekunder, eller om morgenen den 12. april 1977 (justert for California-tiden). Men som du kan se, er dette veldig tungvint. Egentlig, det du vil gjøre er å si: datamaskin, skape meg en dato / tidsvariabel som representerer 12. april 1977. Det er her kalenderklassen kommer inn i spill:

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

Du kan bruke kalenderobjekter til å manipulere datoer og trekke ut interessant informasjon om dem. For eksempel kan du bruke get () -metoden for å fastslå ukedag som jeg ble født på:

 int dayOfWeek = bday.get (Kalender.DAY_OF_WEEK); // Returnerer 3, for tirsdag! 

Merk at kalendermånedene er 0-baserte, så januar er måned 0, ikke måned 1, og derfor april er måned 3, ikke 4. Endelig kan du trekke ut et Date-objekt fra en kalenderdatoskonfigurasjon ved hjelp av getTime () metode.

Formatering Dato og Tid Data

Du kan bruke hjelpeklassen called DateFormat (java.text.DateFormat) for å konvertere rå dato og klokkeslettinformasjon til forskjellige Stringformater (for forskjellige lokaliteter, etc.) eller å analysere Stringinformasjon i passende dato og klokkeslett for bruk i kode.

For eksempel kan du bruke SimpleDateFormat-klassen (en underklasse av DateFormat-klassen) for å lage en egendefinert streng med dato og klokkeslettinformasjon. Først må du spesifisere formatstrengen, ved hjelp av de riktige kodene for de forskjellige biter av informasjon (se dokumentasjonen SimpleDateFormat for detaljer om individuelle koder). Deretter bruker du denne informasjonen til en bestemt dato eller klokkeslett. For eksempel:

 Dato anotherCurDate = nytt Dato (); SimpleDateFormat formatter = ny SimpleDateFormat ("EEEE, MMMM d 'at' hh: mm a 'i året' yyyy G"); StringformattedDateString = formatter.format (anotherCurDate); 

Hvis du skulle skrive ut strengen som heter FormattedDateString, ser du kanskje noe som: "Mandag, 6. desember kl 08:34 i år 2010 AD".

I tillegg kan du også bruke DateFormat og SimpleDateFormat-klassene til å analysere dato- og tidsstrenge i riktig datoklasse. Forhåpentligvis vil du ikke bruke mye tid på å analysere brukerdefinerte datoer (som generelt er ganske irriterende), men å ha en analysemekanisme er nyttig. For eksempel vil du kanskje analysere tidsstempler fra en XML-fil, der du kontrollerer eller kjenner formatet til tidsstempelet på forhånd, og kan derfor generere riktig formatstreng for å analysere med.

Viser dato og klokkeslettinformasjon til brukeren

Det er mange måter å vise dato og klokkeslettinformasjon til brukeren. Måten du velger, avhenger av dine krav.

Kanskje den enkleste måten er å bare vise en bestemt dato eller klokkeslett som en riktig formatert streng. Denne metoden gir mest mening for faste datoer eller tider, for eksempel bursdager eller hendelser. Bare bruk DateFormat-verktøyet for å lage den aktuelle strengen og vise den på skjermen som du ville noen annen tekst (for eksempel i en TextView-kontroll).

For å vise tiden som går "i sanntid", kan du bruke enten AnalogClock (se figur) eller DigitalClock-kontroller.

Tips: Leter du etter en timer? Sjekk ut kronometerkontrollen.

Wrapping Up

Datoer og tider er viktige datatyper som Java-utviklere uunngåelig må jobbe med. Internt lagrer enheter dato og klokkeslett numerisk, men brukerne tolker denne informasjonen på forskjellige måter og bruker forskjellige formater. Behold disse nyansene under kontroll ved å begrense måter brukerne kan legge inn datoer og klokkeslett ved hjelp av innebygde plukkekontroller og sørg for at koden din bruker en generell representasjon av denne informasjonen, for eksempel ved å bruke en av de mange klassene som er tilgjengelige for lagring av dato og klokkeslettinformasjon.

Om forfatterne

Mobilutviklere Lauren Darcey og Shane Conder har medforfatter flere bøker om Android-utvikling: en grundig programmeringsbok med tittel Android Wireless Application Development og Sams TeachYourself Android Application Development i 24 timer. Når de ikke skriver, bruker de sin tid på å utvikle mobil programvare hos deres firma og tilby konsulenttjenester. De kan nås via e-post til [email protected], via bloggen deres på androidbook.blogspot.com, og på Twitter @androidwireless.

Trenger du flere hjelpeskrivende Android-apper? Se våre nyeste bøker og ressurser!