Lär dig Java för Android Utveckling Grunderna för datum och tid

I den här handledningen lär du dig att arbeta med datum och tider i Java och i Android-applikationer. Datum- och tidsdata kan bestämmas, ändras och lagras på olika sätt.

Android-applikationer skrivs i Java, ett programmeringsspråk. Java har ett antal primitiva datatyper för olika typer av tal (heltal, floats, etc.), booleska värden och enstaka tecken. Java innehåller också många klasser för lagring, formatering och ändring av datum och tidsdata för användning i dina Android-applikationer. I den här handledningen läser du hur du bestämmer aktuellt datum och tid, lagringsdatum och tidsdata och visar det på ett antal sätt.

Vad du behöver

Tekniskt behöver du inga verktyg för att slutföra denna handledning, men du kommer säkert att behöva dem för att utveckla Android-applikationer.

För att utveckla Android-applikationer (eller Java-program, för den delen) behöver du en utvecklingsmiljö för att skriva och bygga applikationer. Eclipse är en mycket populär utvecklingsmiljö (IDE) för Java och den föredragna IDE för Android utveckling. Det är fritt tillgängligt för Windows, Mac och Linux operativsystem.

För fullständiga instruktioner om hur du installerar Eclipse (inklusive vilka versioner som stöds) och Android SDK, se webbplatsen för Android-utvecklaren.

Vad är en Date eller Time, verkligen?

Första saker först: Datum och tid är i grunden två delar av samma data (en punkt i tid). När det gäller att lagra datum och tider i en dator kan det vara till hjälp att tänka tillbaka till din första datorklass och komma ihåg att alla data på en dator består av "en och noll". Datorer (och Android-enheter är inget undantag) har inte riktigt en känsla av tid som människor gör, men i stället behåller en numerisk representation av det aktuella datumet eller tiden (alltid tickar framåt, en millisekund åt gången) och formaterar sedan denna information i olika sätt att passa specifika ändamål. En enda omedelbar tid tolkas trots allt beroende på din tidszon eller plats, oavsett om du (eller ditt område) känner igen sommartid och olika andra faktorer.

Lägg till detta faktum att datum och tider visas olika i olika kulturer och lokaler. Till exempel i USA formaterar vi ofta våra datum så här: 6 april 1981 eller 04/06/1981 medan i Europa normalt föregår månaden, så här: 6 april 1981 eller 06/04 / 1981. På samma sätt har vissa länder begreppet AM och PM med 12 timmar, medan andra helt enkelt använder en 24-timmars klocka.

Datorer, inklusive Android-enheter, beräkna tider och datum som ett enda nummer (en lång) - som växer när tiden går. Numret i sig motsvarar antalet millisekunder som förflutit sedan ett visst datum tidigare. I det här fallet är tidpunkten då "tiden" började ticka: midnatt den 1 januari 1970. Denna mekanism kallas Unix-tid eller POSIX-tid.

Vad är en utvecklare att göra?

Frågesport! Vilken av följande strängar representerar korrekt den 4: e månaden i det (Gregorianska) kalenderåret: A, April, APR, Apr, 4 eller 04? Svaret? Allihopa. Redan med att arbeta med datum och tider verkar det vara lite komplicerat, eller hur? I själva verket gjorde vi en snabb genomgång av alla Java-referensböckerna på vårt kontor (inte obetydligt) och väldigt få omslagstider och -tider på något väsentligt sätt. Men gör inte panik. Bara acceptera det faktum att du som utvecklare måste satsa lite på att uppfylla två mål:

1. Ditt externa mål: Att tillåta användaren att arbeta med datum- och tidsformat som de är mest bekväma med, eller åtminstone bekanta med.
2. Ditt interna mål: För att hålla ditt programkod formatoberoende, så fungerar det överallt med lite krångel.

Låt oss nu prata lite om vart och ett av dessa mål.

Externt mål: Var flexibel och använd standardkontroller

Har du någonsin lagt märke till att få resewebbplatser låter användaren manuellt ange datum- eller tidsinformation? I stället förlitar de sig på kalenderplockare och fasta dag-, månads- och årsteglister, eller, vid ett minimum, genomdriver ett visst datumformat (vanligtvis bundet till ditt språk / land, som de begär i förväg). Från ett användargränssnittsperspektiv bör dina appar häxa datum och tid nyanser, åtminstone till viss del. Men du bör också noggrant överväga metoderna där användaren kan ange datum och tid information. Genom att använda standard datum och tidväljare i dina Android-appar, som DatePicker och TimePicker, begränsar du effektivt de data som användare kan skriva in till det som enkelt kan konverteras till lämpliga datum- och tidstrukturer, utan att behöva tolka alla kända format (inte till nämna dess typsnitt).

Det interna målet: Håll dina datum och tider generiska

Ur ett internkodsperspektiv bör dina appar använda en generisk datum / tidsrepresentation som inte bygger på dessa nyanser.

I Java lagras datum och tider på flera sätt, beroende på dina krav.

  • Den långa typen är en primitiv datatyp som kan lagra antalet millisekunder som har förflutit sedan en viss tidpunkt (Unix-tid).
  • Datumsklassen (java.util.Date) är en verktygsklass för lagring av datum och tid på ett sätt som kan hanteras på ett rimligt sätt utan att hela tiden tänka på tid i termer av millisekunder.
  • Kalenderklassen (java.util.Calendar) är en verktygsklass för att arbeta med olika kalendrar, liksom för att manipulera datum och tid information på olika sätt.
  • GregorianCalendar-klassen (en underklass av java.util.Calendar) används främst för datummanipulation på västra halvklotet, där vi använder en 12-månaders kalender med 7 dagar i veckan och två eraser (BC och AD).

Bestämning av aktuellt datum och tid

Det finns ett antal sätt att bestämma aktuell tid på en Android-enhet.

Du kan bestämma de otillräckliga datum- och tidsdata med hjälp av den statiska metoden som finns i systemklassen (java.lang.System):

 lång msTime = System.currentTimeMillis (); Datum curDateTime = nytt datum (msTime); 

Denna metod beror på den tid som enheten tänker Det är, vilket kanske inte är tillförlitligt. Ett annat sätt att bestämma aktuellt datum och tid använder standardkonstruktorn för klassen Date, som skapar ett Date-objekt med aktuellt datum och tidpunkt:

 Datum anotherCurDate = nytt datum (); 

Det finns ännu andra sätt att bestämma de sanna exakta tidsdatorerna, ofta kontrollera kända tidsbehållande servrar för att säkerställa att alla är "synkroniserade". Denna process ligger lite utanför omfattningen av denna handledning, men det är tillräckligt att säga att det bara krävs att du bara ber om och tar emot den rätta tiden, vilket måste redovisas innan synkronisering verkligen kan uppnås.

(Obs! Android-enheter som ansluter till mobiltjänster tenderar att ha lokal noggrann information om datum och tid eftersom detta kan användas i kommunikation med radiotornen.)

Skapa datum och tidvariabler från grunden

Nu, om du vill skapa en datum- eller tidsvariabel från ett visst datum, som en födelsedag. Kanske vet du, precis utanför toppen av ditt huvud, antalet millisekunder sedan 1/1/1970 midnatt som representerar din födelsedag. I mitt fall skulle det vara ungefär 229703700 millisekunder, eller på morgonen den 12 april 1977 (justerat för Kalifornien tid). Men som du kan se är det mycket besvärligt. Egentligen, vad du vill göra är att säga: dator, skapa mig en datum / tidsvariabel som representerar den 12 april 1977. Det är här kalenderkursen spelar in:

 GregorianCalendar bday = ny GregorianCalendar (1977, Kalender.APRIL, 12); 

Du kan använda kalenderobjekt för att manipulera datum och extrahera intressant information om dem. Till exempel kan du använda get () -metoden för att bestämma veckodagen som jag föddes på:

 int dayOfWeek = bday.get (Kalender.DAY_OF_WEEK); // Returnerar 3, för tisdag! 

Observera att kalendermånaderna är 0-baserade, så januari är månad 0, inte månad 1, och därför är april månad 3, inte 4. Slutligen kan du extrahera ett Date-objekt från en kalenderdatumskonfiguration med getTime () metod.

Formateringsdatum och tidsdata

Du kan använda hjälpklassen som heter DateFormat (java.text.DateFormat) för att konvertera rå datum- och tidinformation till olika strängformat (för olika ställen etc.) eller att analysera stränginformation i lämpliga datum och tidsbit för användning i kod.

Du kan till exempel använda SimpleDateFormat-klassen (en underklass i DateFormat-klassen) för att skapa en anpassad sträng som innehåller datum och tidinformation. Först måste du ange din formatsträng, med hjälp av lämpliga koder för de olika bitarna av information (se dokumentationen SimpleDateFormat för detaljer om enskilda koder). Då applicerar du den informationen till ett visst datum eller tidpunkt. Till exempel:

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

Om du skulle skriva ut strängen heter FormattedDateString kan du se något som: "Måndag den 6 december kl 08:34 i år 2010 AD".

I övrigt kan du också använda klasserna DateFormat och SimpleDateFormat för att analysera datum- och tidssträngar i lämplig datumklass. Förhoppningsvis kommer du inte spendera mycket tid på att parsa in användardefinierade datum (vilket i allmänhet är ganska irriterande), men att ha en analyseringsmekanism är användbar. Du kanske till exempel vill analysera tidstämplar från en XML-fil, där du kontrollerar eller känner till tidsstämpelns format i förväg och kan därför generera lämplig formatsträng för att analysera med.

Visar datum och tid information till användaren

Det finns många sätt att visa datum och tid information till användaren. Det sätt du väljer beror på dina krav.

Kanske är det enklaste sättet att helt enkelt visa ett visst datum eller en tid som en korrekt formaterad sträng. Denna metod ger mest mening för fasta datum eller tider, till exempel födelsedagar eller händelser. Använd bara DateFormat-verktygsklassen för att skapa en lämplig sträng och visa den på skärmen som du skulle ha någon annan text (t.ex. inom en TextView-kontroll).

För att visa tiden som går "i realtid" kan du använda antingen AnalogClock (se figur) eller DigitalClock-kontrollerna.

Tips: Letar du efter en timer? Kolla in kronometerstyrningen.

Avslutar

Datum och tider är viktiga datatyper som Java-utvecklare oundvikligen måste arbeta med. Internt lagrar enheter information om datum och tid numeriskt, men användare tolkar denna information på olika sätt och använder olika format. Behåll dessa nyanser under kontroll genom att begränsa sätten användare kan mata in datum och tider med inbyggda pekdonskontroller och se till att din kod använder en generell representation av denna information, till exempel med hjälp av en av de många klasserna som är tillgängliga för lagring av datum och tid.

Om Författarna

Mobila utvecklare Lauren Darcey och Shane Conder har medverkat flera böcker om Android-utveckling: en fördjupad programmeringsbok med titeln Android Wireless Application Development och Sams TeachYourself Android Application Development inom 24 timmar. När de inte skriver, spenderar de sin tid på att utveckla mobil mjukvara hos sina företag och tillhandahålla konsulttjänster. De kan nås via e-post till [email protected], via deras blogg på androidbook.blogspot.com, och på Twitter @ androidwireless.

Behöver du hjälp med att skriva Android Apps? Kolla in våra senaste böcker och resurser!